2015-03-31 4 views
0

Я новичок в системе Symfony. В настоящее время у меня есть маршрут в mybundle/Ресурсы/конфигурации/routing.yml:Маршрутизация Symfony с динамическими необязательными параметрами

fcr_category_head: 
    path: head/{slug}/{city}/{page} 
    defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 } 
    requirements: {page: "\d+"} 

проблема заключается в том, что city опция доступна, когда пользователь использует фильтр, чтобы сузить результаты выбранного города, если city не существует, второй параметр должна быть страница.

так вариации маршрута могут быть такими:

head/slug/city //default page 1 if city is not a number, if number then it is page 
head/slug/city/10 //e.g page 10 
head/slug/10 //no city parameter, because it is number, page 10 

возможно сделать эти комбинации в маршрутизации файла или единственный способ решить это Тхо написать свою собственную логику в контроллере?

спасибо.

+2

Это звучит как хороший вариант использования для параметров запроса, а не атрибутов. Это намного более гибко, что, если вы хотите добавить дополнительный параметр? Посмотрите на большинство сайтов ecom, они используют параметр запроса в фильтрационных продуктах. – Luke

+0

@ Luke Да, но у меня есть запрос, что 'city' должен быть в этом формате. Я думаю, что это в основном для SEO, другие параметры фильтра будут определены как параметры запроса, как вы предложили. – DeividasJJ

ответ

2

Вы можете определить два маршрута для одного и того же действия. Один с городом и один без.

Как это:

fcr_category_head: 
    path: head/{slug}/{page} 
    defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 } 
    requirements: {page: "\d+"} 

fcr_category_head_with_city: 
    path: head/{slug}/{city}/{page} 
    defaults: { _controller: AppBundle:Head:index, slug: "", city: "all", page: 1 } 
    requirements: {page: "\d+", city: "\w+"} 

Сначала будет ловить все запрос, как этот

head/slug/10 
head/slug 

И второй будет ловить

head/slug/city 
head/slug/city/10 
+0

Спасибо, я собираюсь попробовать это. – DeividasJJ

+0

Он отлично работал. – DeividasJJ

Смежные вопросы