Как использовать параметры сервис-контейнера в ваших маршрутах

Как использовать параметры сервис-контейнера в ваших маршрутах

Иногда вам может показаться полезной возможность сделать некоторые части ваших маршрутов глобально настраиваемыми. Например, если вы посмтроите интернационализированный сайт, вы скорее всего начнёте с одной или двух локалей. Естественно, вы добавите требование к вашим маршрутам, чтобы избежать соответствия пользователя с любой локалью кроме тех, что вы поддерживаете.

Вы могли бы жестко закодировать ваше требование _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

Для управления параметрами в классе внедрения зависимостей, смотрите Использование параметров в классе внедрения зависимостей.