2016-01-12 185 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
最好是選擇路線聲明的順序。但有時候,如果你的網址是類似的,它可能會造成一些麻煩......