2016-03-08 92 views
1

我希望用戶能夠使用/{keyword}作爲/search/{keyword}的快捷方式(理想情況下只有當keyword不包含句號或斜線 - 即不是明顯的嘗試加載頁面)。Symfony重定向搜索路由如果路由未找到

我有一個custom 404 page但是,因爲這條路線沒有控制器,我沒有看到如何在error404.html.twig的內容中沒有使用JavaScript客戶端的情況下重定向到搜索路線,這是非常糟糕的做法。

唯一的其他解決方案,我能想到的是有一個/{keyword}路線,不知何故優先此,如果與路徑/$keyword路由存在,那麼加載,否則重定向到/search/$keyword ......但我不能看如何確定這條路線的優先次序或如何檢查一條路徑是否存在路徑(我只能按名稱查看)。

任何人都可以想到一個解決方案嗎?

回答

3

您需要爲此路線設置最低優先級。

的routing.yml:

如果它上面的路由不匹配
foo: 
    path: /foo 
    #foo route config 

bar: 
    path: /bar 
    #bar route config  

#other routes 
#... 

search_alias: 
    path: /{keyword} 
    defaults: { _controller: MyBundle:Redirect:searchKeyword } 
    requirements: 
     keyword: ^([a-zA_Z0-9\s]+)$ 
    methods: [GET] 

search_alias纔會被調用。

+0

太棒了!聽起來很愚蠢,但我沒有想到背面,並認爲這是最低優先級的路線。優雅和簡單,正是我所追求的。謝謝!我剛剛在你的答案中加入了一個工作示例,以幫助可能會來這裏的其他人。 – Egg