Zend Framework 2 - Конфигурация Zend\Mvc outer\Http\Part - Module
-
12-12-2019 - |
Вопрос
Я создаю многоязычное приложение, используя 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');