Как использовать параметры сервис-контейнера в ваших маршрутах
Как использовать параметры сервис-контейнера в ваших маршрутах
Иногда вам может показаться полезной возможность сделать некоторые части ваших маршрутов глобально настраиваемыми. Например, если вы посмтроите интернационализированный сайт, вы скорее всего начнёте с одной или двух локалей. Естественно, вы добавите требование к вашим маршрутам, чтобы избежать соответствия пользователя с любой локалью кроме тех, что вы поддерживаете.
Вы могли бы жестко закодировать ваше требование _locale
во всех ваших
маршрутах, но лучшим решением будет использовать настраиваемый параметр
сервис-контейнера прямо внутри вашей конфигурации маршрутизации:
1 2 3 4 5 6
# config/routes.yaml
contact:
path: /{_locale}/contact
controller: App\Controller\MainController::contact
requirements:
_locale: '%app.locales%'
Теперь вы можете контролировать и устанавливать параметр app.locales
где-то
в вашем контейнере:
1 2 3
# config/services.yaml
parameters:
app.locales: en|es
Вы также можете использовать параметр, чтобы определять путь вашего маршрута (или часть вашего пути):
1 2 3 4
# config/routes.yaml
some_route:
path: /%app.route_prefix%/contact
controller: App\Controller\MainController::contact
Note
Так же, как в обычных файлах конфигурации сервис-контейнера, если вам
действительно нужен знак %
в вашем маршруте, вы можете избежать знак
процентов путём его удвоения, например, /score-50%%
, что будет сводиться
к /score-50%
.
Однако, так как знаки %
, включённые в любой URL автоматически шифруются,
итоговым URL этого примера будет /score-50%25
(%25
- это результат
шифрования знака %
).
See also
Для управления параметрами в классе внедрения зависимостей, смотрите Использование параметров в классе внедрения зависимостей.