#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-адреса.
Но я также хочу иметь там необязательный параметр, чтобы я мог перейти к:
- http://example.com/items/danger
- http://example.com/items/danger/1
- http://example.com/items/danger/2
- и т.д…
Или
- http://example.com/items/unclassified
- http://example.com/items/unclassified/1
- http://example.com/items/unclassified/2 и т.д…
Таким образом, очевидно, что «опасность» и «неклассифицированный» находятся на месте нового необязательного параметра (назовем его {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)
{
//...