У меня есть маршрут, который определяет язык :lang
здесь (Zend Framework 3):
'contact' => [
'type' => Segment::class,
'options' => [
'route' => '/:lang/hello',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'contact',
'lang' => 'en'
]
],
],
когда я иду на веб-страницу http://localhost/pp/public/it/hello
это хранит it
значение в lang segment
,
Проблема в моей навигации, она говорит для других областей, как показано:
http://localhost/pp/public/en/services
должно было
http://localhost/pp/public/it/services
Есть ли причина, почему Zend\Navigation
не использует значение it
вместо значения по умолчанию en
для параметра lang сборки маршрута
Согласно комментарию Sven Buis, вы можете вручную добавлять текущее значение к каждому вызову помощника по URL, но это, вероятно, будет не лучшим способом, так как это означает добавление кода практически везде для одной цели.
Другое решение состоит в том, чтобы просто использовать последний параметр помощника вида url, который позволяет повторно использовать текущий параметр маршрута (установите его в true, по умолчанию false). Мне также не нравится это решение, потому что у вас могут быть крайние случаи, когда все значения по умолчанию не были переопределены, и это может нарушить ваш код в местах, которые вы не ожидаете.
Вы можете взглянуть на подход, используемый в https://github.com/juriansluiman/SlmLocale (пока работает только в ZF2, у меня не было времени закончить пиар для ZF3). Он использует систему событий для подключения к циклу отправки и установки вашего языка где-то там.
Других решений пока нет …