【问题标题】:Symfony route /{slug} overriding existing routesSymfony 路由 /{slug} 覆盖现有路由
【发布时间】:2016-01-12 18:05:55
【问题描述】:

我有实体 Page 由 slug 识别。我还可以在页面控制器中查看页面:

/**
 * @Route("/{slug}", name="app.page", requirements={"slug": "[\w-]+"})
 * @ParamConverter("page", class="AppBundle:Page", options={"slug" = "slug"})
 * @param Request $request
 * @param Page $page
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function showAction(Request $request, Page $page)
{
    // replace this example code with whatever you need
    return $this->render('Page/view.html.twig', array(
        'page' => $page,
    ));
}

我正在尝试从数据库中获取页面,这很有效。但是我有一个问题,所有现有路由(例如:/login)都被此操作覆盖,因此我没有查看登录表单,而是得到 404,因为我在数据库中没有包含 slug 登录的页面。

如果没有定义任何匹配的路由,如何强制 Symfony 使用该路由?

【问题讨论】:

    标签: symfony url routing


    【解决方案1】:

    在您的主路由文件中(在您的配置文件夹中找到) - 只需更改捆绑引用的顺序。 首先匹配的路由是路由器将使用的路由,因此可以更改检查的顺序。

    只需将您的 PageController 捆绑包放在最底部即可。

    如果你在同一个包中有多个控制器,你也可以在路由文件中单独引用控制器

    【讨论】:

      【解决方案2】:

      是的,您可以为您的 URL 使用前缀,看起来也不像。
      例如:
      /page/{url}/user/login
      最好是选择路由的声明顺序。但有时如果你的网址是相似的,它可能会造成一些小麻烦......

      【讨论】:

        猜你喜欢
        • 2013-07-09
        • 2016-07-16
        • 2023-03-26
        • 1970-01-01
        • 2016-07-12
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        相关资源
        最近更新 更多