Заказ маршрутов с использованием аннотаций
Обычное решение при создании маршрутов в symfony и вы хотите иметь один маршрут, например
/{username}
чтобы он не конфликтует с другими маршрутами, такими как /login или/info, просто для того, чтобы поместить этот маршрут в качестве вашего последнего маршрута в файл routing.yml. Поскольку все остальные маршруты имеют приоритет, этот конфликт избегается. Но как вы можете это сделать, если вы определяете свои маршруты как аннотации в своих контроллерах? Есть ли способ указать порядок этих маршрутов в этом случае?
Ответы
Ответ 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} или метода.
Вы также можете полностью удалить маршрут из аннотации для контроллера. Он больше не требуется, поскольку он перезаписывается в любом случае:)