16

当您在 symfony 中创建路由并且您希望拥有一个类似的路由时,通常的解决方案是

/{username}

为了使它不与 /login 或 /info 等其他路由冲突,只需将该路由作为您的最后一个路由放在您的 routing.yml 文件中。由于所有其他路由优先,因此避免了这种冲突。但是,如果您将路由定义为控制器中的注释,您怎么能做到这一点呢?在这种情况下,有什么方法可以指定此路线的顺序吗?

4

3 回答 3

25

在控制器的上下文中,操作方法的顺序定义了路由的顺序。在整个应用程序的上下文中,您可以显式导入每个控制器来控制顺序,例如:

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
于 2012-08-01T12:30:33.660 回答
1

我无法对答案发表评论,所以我将离开我必须如何在 Symfony 2.3 中编写它以使其工作:

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

注意将“\”更改为“/”并在控制器名称末尾使用 .php。

于 2014-10-01T07:00:50.983 回答
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。

您还可以从控制器的注释中完全删除路由。不再需要它,因为无论如何它都会被覆盖:)

于 2017-07-11T16:42:24.847 回答