我遇到了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 /
我怎么能解决这个问题?
由于
答案 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]+'
)
));