Генерация URL из маршрута в Zend Framework 2

0

Я начинаю ZF2 и работаю на своем первом сайте. Мне нужен многоязычный сайт и у меня есть проблемы с маршрутизацией. Я настроил свои маршруты следующим образом:

'lang' => array(
    'type' => 'segment',
    'options' => array(
        'route' => '/:lang',
        'constraints' => array(
            'lang' => 'en|it'
        ),
        'defaults' => array(
            'controller' => 'Application\Controller\Index',
            'action' => 'index'
        )
    ),
    'may_terminate' => true,
    'child_routes' => array(
        'home' => array(
            'type' => 'literal',
            'options' => array(
                'route' => '/home',
                'defaults' => array(
                    'controller' => 'Application\Controller\Index',
                    'action' => 'index'
                )
            )
        ),
        'other routes' ...
    )
)

Итак, я могу позже использовать /lang для настройки переводчика. (www.site.com/it/home или www.site.com/en/home)

Теперь мне нужно добавить ссылки в макете для переключения языков, поэтому мне нужно сгенерировать URL-адрес на той же странице, но переключить "it" на "en" и наоборот. Как я могу это сделать? Могу ли я как-то получить только следующую часть маршрута ('/home', '/about', '/show/gallery' и т.д.) Из представления?

  • 1
    Я уверен, что вы можете! что ты уже испробовал?
  • 0
    Ну, я получаю значение "lang" с помощью $ this-> getEvent () -> getRouteMatch () -> getParam ('lang'), но не знаю, как получить значение маршрута из буквального маршрута ...
Показать ещё 1 комментарий
Теги:
zend-framework2

1 ответ

0
Лучший ответ

Я думаю, вы просто можете сделать следующее в своем макете/представлении:

//using url view helper
echo $this->url(null, array('lang' => 'en'));

Путем присвоения null как имени маршрута помощник примет текущее сопоставленное имя, поэтому теоретически он должен работать. Но, к сожалению, я не могу сказать, что произойдет, если маршрут будет сегментом с уже установленными параметрами, sry.

  • 0
    Вау, это сработало отлично и очень легко, большое спасибо! Единственное, когда я нахожусь на корневой странице (www.site.com), сгенерированная ссылка не добавит / en, но каждая другая страница работает!
  • 0
    Я выяснил, как исправить проблему с корневой страницей, но у меня есть проблема, которая заключается в том, что при переходе на несуществующий маршрут помощник представления URL генерирует следующую ошибку: Неустранимая ошибка: необработанное исключение 'Zend \ View \ Exception \ RuntimeException »с сообщением« Не предоставлен экземпляр RouteMatch », и страница ошибки 404 не отображается. Есть идеи, как мне этого избежать? Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню