Вопрос

Я создаю многоязычное приложение, используя ZF2..и не может определить, как добавить URL-адрес части, который будет составлять основу каждого URL-адреса независимо от модулей.

http://localhost/en/us/application/index/index/

Я полностью понимаю, как настроить /[:namespace[/:controller[/:action]]] использование DI

http://localhost/application/index/index/
http://localhost/guestbook/index/index/
http://localhost/forum/index/index/

Чего я не понимаю, так это как настроить Часть маршрут, который будет базовым для всех маршрутов..В ZF1 я использовал Цепочка маршрутов чтобы достичь этого..

Итак, мне нужно настроить Часть маршрут следования /[:lang[/:locale]] который применяется по всему сайту, а затем позволяет модулю настраивать /[:namespace[/:controller[/:action]]] или любой другой необходимый маршрут..

http://localhost/en/us/application/index/index/
http://localhost/zh/cn/application/index/index/
http://localhost/en/uk/forum/index/index/
Это было полезно?

Решение

Я думаю, что то, что вы ищете, - это child_routes ключ конфигурации.Взгляните на то, как ZfcUser настраивает его маршрутизацию (здесь):он создает базовый буквальный маршрут (/user), а затем привязывает к нему подмаршруты (/user/login и т.д.) Через child_routes массив.

Я думаю, что что-то подобное этому поможет вам:

'router' => array(
    'routes' => array(
        'myapp' => array(
            'type' => 'Segment',
            'options' => array(
                'route' => '/[:lang[/:locale]]',
                'defaults' => array(
                    'lang'   => 'en',
                    'locale' => 'us',
                ),
            ),
            'may_terminate' => false,
            'child_routes' => array(
                'default' => array(
                    'type'    => 'Segment',
                    'options' => array(
                        'route'    => '/[:controller[/:action]]',
                        'constraints' => array(
                            'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                        'controller' => 'index',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),
),

Затем в вашем контроллере вы могли бы сделать это, чтобы получить язык и локаль:

$this->params()->fromRoute('lang');
$this->params()->fromRoute('locale');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top