Порядок маршрутизации аннотаций Symfony - PullRequest
0 голосов
/ 05 июня 2019

В настоящее время я застрял с маршрутизацией в моем проекте Symfony4 (4.3). Моя проблема довольно проста, я хочу использовать аннотации маршрутов в моих контроллерах, но я хочу определить их порядок.

Например, если у меня есть два контроллера со следующей маршрутизацией:

class BarController extends AbstractController
{
    /**
     * @Route("/test/{data}", name="app_bar")
     */
    public function index($data)
    {
        // ...
        return $this->render('index.html.twig', [
            'data' => $data,
        ]);
    }
}

и

class FooController extends AbstractController
{
    /**
     * @Route("/test/my_value", name="app_foo")
     */
    public function index()
    {
        // ...
        return $this->render('index.html.twig', [
            'data' => 'my_value',
        ]);
    }
}

В config/routes/annotations.yaml я определяю свой маршрут следующим образом

app_controllers:
    resource: ../../src/Controller/
    type: annotation

Тогда, если я позвоню /test/my_value, я бы хотел, чтобы меня перенаправили на FooController, поскольку его действие index определяет @Route("/test/my_value", name="app_foo"), но, как и маршруты, загружается в алфавитном порядке действие index из BarController с маршрутом app_bar называется первым.

Итак, я попытался определить следующую маршрутизацию:

app_foo_controller:
    resource: ../../src/Controller/FooController.php
    type: annotation
app_controllers:
    resource: ../../src/Controller/
    type: annotation

Но это не сработало, BarController и его app_bar маршрут по-прежнему вызывались до app_foo маршрута от FooController.

Кроме того, я не понимаю цели config/routes/annotations.yaml против config/routes.yaml, поскольку оба могут содержать маршруты любого типа ... Я что-то пропустил?

1 Ответ

0 голосов
/ 05 июня 2019

Неважно, я нашел решение.Мне просто не хватает того факта, что я переопределяю свою конкретно app_foo_controller маршрутизацию, когда я определяю app_controllers, решение состоит в том, чтобы определить каждый контроллер следующим образом:

app_controllers:
    resource: ../../src/Controller/
    type: annotation
app_foo_controller:
    resource: ../../src/Controller/FooController.php
    type: annotation
app_bar_controller:
    resource: ../../src/Controller/BarController.php
    type: annotation
...