在symfony中创建路线时,通常的解决方案是希望有一条路径,如
/{username}
这样它就不会与/ login或/ info等其他路由冲突,只是将该路由作为您的routing.yml文件中的最后一条路由。由于所有其他路由优先,因此避免了这种冲突。但是,如果将路径定义为控制器中的注释,如何才能执行此操作?在这种情况下,有没有办法指定这条路线的顺序?
答案 0 :(得分:23)
在控制器的上下文中,动作顺序方法定义路径的顺序。在整个应用程序的上下文中,您可以显式导入每个控制器以控制顺序,例如:
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
答案 1 :(得分:1)
我不能对答案发表评论,所以我将离开我如何在Symfony 2.3中编写它以使其工作:
Home:
resource: "@AcmeBundle/Controller/HomeController.php"
prefix: /home #optional
type: annotation
注意将“\”更改为“/”并在控制器名称末尾使用.php。
答案 2 :(得分:1)
您需要在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 }
默认情况下,使用相同的名称,您将覆盖原始名称。不要忘记其他可能很重要的选项。像{username}或方法的默认值或null。
您还可以从控制器的注释中完全删除路径。它不再需要,因为它被覆盖了:))