Подтвердить что ты не робот

Заказ маршрутов с использованием аннотаций

Обычное решение при создании маршрутов в symfony и вы хотите иметь один маршрут, например

/{username}

чтобы он не конфликтует с другими маршрутами, такими как /login или/info, просто для того, чтобы поместить этот маршрут в качестве вашего последнего маршрута в файл routing.yml. Поскольку все остальные маршруты имеют приоритет, этот конфликт избегается. Но как вы можете это сделать, если вы определяете свои маршруты как аннотации в своих контроллерах? Есть ли способ указать порядок этих маршрутов в этом случае?

4b9b3361

Ответ 1

В контексте контроллера порядок действий определяет порядок маршрутов. В контексте всего приложения вы можете явно импортировать каждый контроллер для управления порядком, например:

Home:
    resource: "\Vendor\Controller\HomeController"
    type: annotation

Security:
    resource: "\Vendor\Controller\SecurityController"
    type: annotation

security.log_out:
    pattern: "/logout"

User:
    resource: "\Vendor\Controller\UserController"
    type: annotation

Ответ 2

Я не могу прокомментировать ответ, поэтому я оставлю, как мне пришлось писать его в Symfony 2.3, чтобы заставить его работать:

Home:
    resource: "@AcmeBundle/Controller/HomeController.php"
    prefix: /home #optional
    type: annotation

Обратите внимание на изменение "\" на "/" и использование .php в конце имени контроллера.

Ответ 3

Вам нужно перезаписать правило для этого маршрута в конце вашего routing.yml. Вы можете сделать это, используя то же имя для маршрута, что и тот, который автоматически создается аннотацией. Имя можно найти с помощью команды консоли:

php app/console debug:router

Итак, в вашей routing.yml в качестве последней строки вы добавите:

the_name_of_the_route_as_found_with_appconsole_debug_router:
    path:/{username}
    defaults:  { _controller: YourBundle:YourController:the_action_to_use } 

Используя одно и то же имя, оно задается по умолчанию, вы переопределите оригинал. Не забывайте о других вариантах, которые могут быть важны. Как значение по умолчанию или null для {username} или метода.

Вы также можете полностью удалить маршрут из аннотации для контроллера. Он больше не требуется, поскольку он перезаписывается в любом случае:)