Symfony route / {slug}覆盖现有路由

时间:2016-01-12 18:05:56

标签: symfony url routing

我有slug标识的实体Page。此外,我还可以在页面控制器中查看页面:

/**
 * @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使用此路由?

2 个答案:

答案 0 :(得分:3)

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

只需将PageController包放在最底层即可。

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

答案 1 :(得分:1)

是或者你可以使用URL的前缀看起来也不一样 例如:
/page/{url}/user/login
最好是选择路线声明的顺序。但是,如果你的网址是相同的话,有时会引起一些麻烦......