排除路径中的路径

isw*_*nky 4 php regex routing yaml symfony

我目前在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: "^.+"
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在网址中调用“论坛”“管理员”,它将自动使用上述路由配置。有什么方法可以排除特定路径,并让适当的路由/控制器处理这些请求?

例如:

requirements:
    path: "^ (exclude: "admin/" and "blog/") .+"
Run Code Online (Sandbox Code Playgroud)

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

isw*_*nky 5

事实证明,非常基本的正则表达式可以解决此问题:

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

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

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