сложная маршрутизация с Symfony - PullRequest
0 голосов
/ 29 мая 2018

В поисках лучшей практики действий маршрутизации Symfony (4) для моей схемы URL.Допустим, я обнаруживаю GEO IP и показываю другой язык для веб-пользователей даже в URL.Итак, что будет лучше для разработки маршрутизации?

примеры ссылок, когда пользователь приезжает из США:

example.com/static_link_in_en/additional_static_element_in_en/special_static_element_in_en/extra_static_attribute_in_en
example.com/product_name_in_en/additional_element_of_product_in_en/special_element_for_this_item_in_en/extra_attribute_in_en

, когда пользователь приезжает из Франции:

example.com/static_link_in_fr/additional_static_element_in_fr/special_static_element_in_fr/extra_static_attribute_in_fr
example.com/product_name_in_fr/additional_element_of_product_in_fr/special_element_for_this_item_in_fr/extra_attribute_in_fr

другой, может быть, лучший пример:

example.com/tag - static route, generates a tag cloud in EN
example/tag/ - static route, but displays an error or 404 page, because we are not searching in the database with an empty string in EN
example.com/tag/red - searching in the database with keyword 'red'
example.com/tag/blue - exceptional keyword, we have reserved tag 'blue' so the script will not be searching in the database, the static route will be used in EN

те же действия, только что переведенные на французский язык:

example.com/marque 

example.com/marque/

example.com/marque/rouge

Допустим, глубокий уровень URL может содержать до 10 элементов, любые предложения

1 Ответ

0 голосов
/ 29 мая 2018

Лучшей политикой является включение локали в URL.Это полностью поддерживается системой маршрутизации с использованием специального параметра _locale.

# config/routes.yaml
contact:
    path:       /{_locale}/contact
    controller: App\Controller\ContactController::index
    requirements:
        _locale: en|fr|de

При использовании специального параметра _locale в маршруте, соответствующий языковой стандарт автоматически устанавливается в запросе и может быть получен через getLocale.() метод.Другими словами, если пользователь посещает URI / fr / contact, локаль fr будет автоматически установлена ​​в качестве локали для текущего запроса.

Теперь вы можете использовать локаль для создания маршрутов к другим переведенным страницам вваше приложение.

Источник: https://symfony.com/doc/current/translation/locale.html

Symfony не поддерживает определение маршрутов с различным содержимым в зависимости от языка пользователя.В этих случаях вы можете определить несколько маршрутов на контроллер, по одному для каждого поддерживаемого языка;или используйте любой из пакетов, созданных сообществом для реализации этой функции, например, JMSI18nRoutingBundle и BeSimpleI18nRoutingBundle.

Источник: https://symfony.com/doc/current/routing.html#translating-routes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...