当您在 symfony 中创建路由并且您希望拥有一个类似的路由时,通常的解决方案是
/{username}
为了使它不与 /login 或 /info 等其他路由冲突,只需将该路由作为您的最后一个路由放在您的 routing.yml 文件中。由于所有其他路由优先,因此避免了这种冲突。但是,如果您将路由定义为控制器中的注释,您怎么能做到这一点呢?在这种情况下,有什么方法可以指定此路线的顺序吗?
当您在 symfony 中创建路由并且您希望拥有一个类似的路由时,通常的解决方案是
/{username}
为了使它不与 /login 或 /info 等其他路由冲突,只需将该路由作为您的最后一个路由放在您的 routing.yml 文件中。由于所有其他路由优先,因此避免了这种冲突。但是,如果您将路由定义为控制器中的注释,您怎么能做到这一点呢?在这种情况下,有什么方法可以指定此路线的顺序吗?
在控制器的上下文中,操作方法的顺序定义了路由的顺序。在整个应用程序的上下文中,您可以显式导入每个控制器来控制顺序,例如:
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
我无法对答案发表评论,所以我将离开我必须如何在 Symfony 2.3 中编写它以使其工作:
Home:
resource: "@AcmeBundle/Controller/HomeController.php"
prefix: /home #optional
type: annotation
注意将“\”更改为“/”并在控制器名称末尾使用 .php。
您需要在 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。
您还可以从控制器的注释中完全删除路由。不再需要它,因为无论如何它都会被覆盖:)