Необязательные параметры URL в Symfony

#symfony #url #router

#симфония #url #маршрутизатор

Вопрос:

В настоящее время у меня есть эта страница:

 my_homepage:
    pattern:  /items/{page}
    defaults: { _controller: MyBundle:Default:index, page: 1 }
    requirements:
      page: d 
 

Так что в настоящее время я могу перейти к http://example.com/items / и он покажет страницу 1. Я могу пойти в http://example.com/items/1 и это также показало бы страницу 1, http://example.com/items/2 будет показана страница 2 и так далее.

Я хочу сохранить этот стиль URL-адреса.

Но я также хочу иметь там необязательный параметр, чтобы я мог перейти к:

Или

Таким образом, очевидно, что «опасность» и «неклассифицированный» находятся на месте нового необязательного параметра (назовем его {type} ).

По сути, в исходном примере будет показано все, тогда как последние 2 (с надписями «опасно» и «неклассифицировано») будут фильтровать список и показывать только определенные элементы.

Итак, мой вопрос в том, что мне делать в моем маршрутизаторе и моем контроллере, чтобы иметь возможность использовать этот необязательный параметр между «элементами» и «номером страницы» (если указан номер страницы)?

Любые идеи приветствуются, спасибо.

Ответ №1:

Для двух необязательных аргументов вы можете создать псевдоним вашего маршрута:

 my_homepage:
    pattern:  /items/{page}
    defaults: { _controller: MyBundle:Default:index, page: 1 }
    requirements:
        page: d 

my_homepage_with category:
    pattern:  /items/{category}/{page}
    defaults: { _controller: MyBundle:Default:index, page: 1}
    requirements:
        page: d 
        category: w 
 

Вашему контроллеру indexAction требуется необязательный аргумент category

 public function indexAction($page, $category = null)
{
    //...