Сложная маршрутизация с Symfony

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Лучшая политика - включить языковой стандарт в 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

Другие вопросы по теме