【问题标题】:Symfony 4 Conditional RoutingSymfony 4 条件路由
【发布时间】:2021-11-08 21:08:50
【问题描述】:

我正在使用 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 时使用该路由

提前谢谢你

【问题讨论】:

标签: php routes conditional-statements symfony4 requirements


【解决方案1】:

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

但是,有时可能由于其他功能位于不同名称的不同控制器文件中而导致排序困难..

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

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

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

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

之类的路线

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2017-11-21
    • 2019-08-17
    • 2020-04-26
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多