Как ограничить сопоставление маршрутов с помощью условий
Как ограничить сопоставление маршрутов с помощью условий
Маршрут может быть создан так, чтобы совпадать только с определенными
маршрутными заполнителями (с помощью обычных выражений), HTTP-методами,
или именами хостов. Если вам нужно больше гибкости в определении логики
произвольного совпадения, используйте опцию маршрутизации conditions
:
1 2 3 4 5
# config/routes.yaml
contact:
path: /contact
controller: 'App\Controller\DefaultController::contact'
condition: "context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'"
Сondition
- это выражение, и вы можете узнать больше о его синтаксисе
здесь . С ним маршрут не будет
совпадать, кроме случаев, когда HTTP-метод является GET или HEAD и если
заголовок User-Agent
соответствует firefox
.
Вы можете создавать в выражении логику такой сложности, как вам нужно, используя две переменные, которые передаются в выражение:
context
- Экземпляр класса RequestContext, который содержит самую фундаментальную информацию о соответствующем маршруте.
request
- Объект Symfony Request (см. ).
Caution
Условия не берутся в расчёт при генерировании URL.