2016-01-12 132 views
1

我有用slug标识的实体Page。我也有在页面CONTROLER查看页面的操作:Symfony路由/ {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)都被这个动作覆盖,所以我没有查看登录表单,而是因为我没有在数据库中使用slug登录页面。

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

回答

3

在您的主要路由文件(在您的配置文件夹中找到) - 只需更改您的包引用的顺序。 无论哪条路线首先被匹配,路由器将使用该路由,以便可以更改它们被检查的顺序。

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

您也可以参考控制器seperatly在路由文件,如果你有同捆

1

是内多个控制器或这样你就可以使用前缀为你的URL看起来并不像了。
例如:
/page/{url}/user/login
最好是选择路线声明的顺序。但有时候,如果你的网址是类似的,它可能会造成一些麻烦......