Symfony 4 条件路由

Symfony 4 Conditional Routing

我正在使用 symfony 4 构建一个网站。该网站的页面是在管理部分动态创建的。

我如何创建一个例外或要求,使呈现自定义页面的路由仅用于自定义页面并且不会影响登录和注册的路由?这是我的溃败

 /**
 * @Route("/{page}", name="subpages", requirements={"page"="\d+"})
 */
public function subpages(Request $request): Response
{

    $page = $request->get('page');

    $content = $this->getDoctrine()->getRepository(Pages::class)->find($page);
    
    return $this->render('public_pages/subpage.html.twig', [
        'controller_name' => 'home',
        'content' => $content
    ]);
}

在这种情况下,如果 {page} 不是 /login 或 /register

,我只想使用该路由

提前致谢

控制器函数的顺序很重要,您应该在 subpage 函数之前放置 /login/register

但是,有时可能无法实现,因为其他函数位于不同名称的不同控制器文件中,因此很难订购。

您可以在要求中使用Regex。所以在你的情况下你可以这样做:

@Route("/{page}", name="subpages", requirements={"page"="^(?!\blogin\b|\bregister\b).+"})

这将匹配除 loginregister 之外的任何路由。您可以使用单词边界向正则表达式中添加更多内容,例如 \bcontact\b.

如果您有很多路线,这可能不是最好的方法,因为很难跟踪。相反,您也可以考虑使用 "/pages/{page}"

这样的路线

Symfony 5.1 支持 priority 这使得在注释中使用 priority 参数更容易处理这种情况。