【问题标题】:Exclude paths in routing在路由中排除路径
【发布时间】:2014-08-10 14:19:50
【问题描述】:

我目前在 Symfony2 中使用需求路径来匹配任何 URL 并适当地处理请求。例如"example.com/blog/posts/my-new-post" 会将路径blog/posts/my-new-post 返回到控制器,然后我将拆分并检查现有数据等。这工作正常,问题是路由的配置方式意味着它将始终返回相同的模板文件即使我设置了其他路线。

symfony_default_page:
    path:     /{path}
    defaults: { _controller: SymfonyBundle:Default:page }
    requirements:
        path: "^.+"

但是,如果我想在 url 中调用 "forum""admin",它会自动使用上述路由配置。有没有办法排除特定路径并让适当的路由/控制器处理这些请求?

例如:

requirements:
    path: "^ (exclude: "admin/" and "blog/") .+"

因此,如果 admin、admin/ 或 admin/other-areas 可以访问,它将使用它们的路由配置,如果它们不存在,则抛出 404。

【问题讨论】:

    标签: php regex symfony routing yaml


    【解决方案1】:

    原来非常基本的正则表达式可以解决这个问题:

    ^(?!admin|login|blog).+

    symfony_default_page:
        path:     /{path}
        defaults: { _controller: SymfonyBundle:Default:page }
        requirements:
            path: "^(?!admin|login|blog).+"
    

    但正如@Santiago00 所建议的那样,在您的 bundle/config/routing.yml 中以正确的顺序放置不同的路由会更容易,或者如果您使用多个捆绑包,请更改 app/config/routing.yml 中导入的捆绑包的顺序

    【讨论】:

      【解决方案2】:

      尝试在默认路由之前声明“admin”和“blog”路由,您可以在 Symfony Book http://symfony.com/doc/current/book/routing.html#adding-requirements 中阅读更多相关信息

      较早的路线总是赢

      这一切都意味着路线的顺序非常重要。如果 blog_show 路由放置在 blog 路由之上,则 URL /blog/2 将匹配 blog_show 而不是 blog,因为 blog_show 的 {slug} 参数没有要求。通过使用正确的顺序和巧妙的要求,您几乎可以完成任何事情。

      【讨论】:

      • 是的,事实证明我试图让事情变得过于复杂,而它们在 app/config/routing.yml 中的顺序错误。干杯
      猜你喜欢
      • 2019-09-05
      • 2021-12-22
      • 2016-09-07
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多