2015-01-08 4 views
0

Я начинаю ZF2 и работаю на своем первом сайте. Мне нужен многоязычный сайт и некоторые проблемы с маршрутизацией. Я настроил мои маршруты, как это:Создание URL-адреса из маршрута в Zend Framework 2

'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') , но не знаю, как получить значение маршрута из литерала. – Aise

+0

Можно ли передавать параметры в параметрах маршрута? – Aise

ответ

0

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

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

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

+0

Ничего себе, это сработало отлично, и очень легко, спасибо большое! Единственное, когда я нахожусь на корневой странице (www.site.com), сгенерированная ссылка не добавит/en, но каждая другая страница работает! – Aise

+0

Я выяснил, как исправить проблему с корневой страницей, но проблема заключается в том, что когда я перехожу на не существующий маршрут, помощник представления url генерирует следующую ошибку: Неустранимая ошибка: исключить исключение «Zend \ View \ Exception \ RuntimeException 'с сообщением «Отсутствует экземпляр RouteMatch» и страница ошибки 404 не отображается. Любая идея, как я могу избежать этого? Благодарю. – Aise

Смежные вопросы