使用注释对路线进行排序

时间:2012-08-01 12:18:51

标签: symfony

在symfony中创建路线时,通常的解决方案是希望有一条路径,如

/{username}

这样它就不会与/ login或/ info等其他路由冲突,只是将该路由作为您的routing.yml文件中的最后一条路由。由于所有其他路由优先,因此避免了这种冲突。但是,如果将路径定义为控制器中的注释,如何才能执行此操作?在这种情况下,有没有办法指定这条路线的顺序?

3 个答案:

答案 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。

您还可以从控制器的注释中完全删除路径。它不再需要,因为它被覆盖了:))