2016-03-08 2 views
1

Я бы хотел, чтобы пользователи могли использовать /{keyword} как ярлык для /search/{keyword} (в идеале, только если keyword не содержит полной остановки или косой черты, то есть не является очевидной попыткой загрузить страница).Symfony Redirect To Search Route If Route Not Found

У меня есть custom 404 page, но, поскольку у этого маршрута нет контроллера, я не вижу, как перенаправить на маршрут поиска, не используя клиентскую сторону JavaScript в содержимом error404.html.twig, и это ужасно плохая практика.

Единственное другое решение, я могу думать о том, чтобы иметь /{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