路由和URL参数 - ZendFramework

时间:2011-12-15 03:30:15

标签: php routes zend-framework zend-route

我遇到了zendframework路由和params的问题。

我的视图页面中有语言选择器:

 <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,我得到正确的链接Ex: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 param的链接。例如:localhost / app / contact /

我怎么能解决这个问题?

由于

2 个答案:

答案 0 :(得分:2)

第一个示例基于默认路由,类似于:module/:controller/:action/* 注意路线末端的*;它定义了url可以包含其他键/值对。

要使您的联系路线有效,您可以使用

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

这会使网址看起来像/contact/pt。或者您可以使用:

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

这将导致/contact/index/lang/pt

答案 1 :(得分:0)

您也可以使用此代码:

$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