Маршруты и параметры URL - ZendFramework - PullRequest
0 голосов
/ 15 декабря 2011

У меня проблема с маршрутами и параметрами Zendframework.

У меня на странице просмотра есть селектор языка:

 <div class="language-chooser">
    <?
    $params = Zend_Controller_Front::getInstance()->getRequest()->getParams();
    unset($params['module']);
    unset($params['controller']);
    unset($params['action']);
    ?>
    <a href="<?= $this->url(array_merge($params, array('lang' => 'pt'))); ?>"><img src="<?= $this->baseUrl('/images/flags/br.png'); ?>" alt="" /></a>
    <a href="<?= $this->url(array_merge($params, array('lang' => 'en'))); ?>"><img src="<?= $this->baseUrl('/images/flags/us.png'); ?>" alt="" /> </a>
</div>

Работает без маршрутов.Получая доступ к localhost / app / contact, я получаю ссылку правильно Пример: localhost / app / contact / index / lang / en

Но если я добавлю маршрут

protected function _initRotas() {
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $route = new Zend_Controller_Router_Route(
                    '/contact',
                    array(
                        'module' => 'default',
                        'controller' => 'contact',
                        'action' => 'index'
                    )
    );
    $router->addRoute('contact', $route);
}

, я получуссылка без параметра lang.Пример: localhost / app / contact /

Как я могу решить эту проблему?

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Первый пример основан на маршруте по умолчанию, который выглядит как :module/:controller/:action/* Обратите внимание на * в конце маршрута;он определяет, что URL может содержать дополнительные пары ключ / значение.

Чтобы ваш маршрут контакта работал, вы можете использовать

$route = new Zend_Controller_Router_Route(
    '/contact/:lang',
    array(
        'module' => 'default',
        'controller' => 'contact',
        'action' => 'index'
    )
);

, чтобы URL выглядел как /contact/pt.Или вы можете использовать:

$route = new Zend_Controller_Router_Route(
    '/contact/*',
    array(
        'module' => 'default',
        'controller' => 'contact',
        'action' => 'index'
    )
);

, что приведет к /contact/index/lang/pt

0 голосов
/ 10 октября 2012

Также вы можете использовать этот код:

$Router = Zend_Controller_Front::getInstance()->getRouter();
$Router->addRoute('move', new Zend_Controller_Router_Route(
    '/contact/:lang',
    array(
        'module' => 'default',
        'controller' => 'contact',
        'action' => 'index'
    ),
    array(
        'lang' => '[a-z]+'
    )
));

Zend_Controller_Front

Zend_Controller_Router_Route

...