我正在尝试向Zend Framework 1应用程序添加新路由。但它似乎理解我的两个参数作为一个。我该如何解决这个问题?
$route = new Zend_Controller_Router_Route(':name-:type', array('controller' => 'tour', 'action' => 'index'));
$route = $routeLang->chain($route);
$router->addRoute('tour', $route);
答案 0 :(得分:1)
让我再次重新提出你的问题,以便其他人可以快速得到它:
如何通过' name'和'键入'参数全部由破折号连接(' - '),所以如果要转到网址:' tour / index / sampleName-sampleType ',Zend可以识别name是' sampleName',type是' sampleType'?
您需要:Zend_Controller_Router_Route_Regex()
如果您希望网址匹配:' www.example.com/sampleName-sampleType'
protected function _initRoutes ()
{
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$router = $front->getRouter();
$route = new Zend_Controller_Router_Route_Regex('(.+)-(.+)', array('controller' => 'tour', 'action' => 'index'), array(1 => 'name', 2=>'type'), '%s-%s');
$router->addRoute('tour', $route);
}
或者如果您想匹配:' www.example.com/sampleName-tour-sampleType'
protected function _initRoutes ()
{
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$router = $front->getRouter();
$route = new Zend_Controller_Router_Route_Regex('(.+)-tour-(.+)', array('controller' => 'tour', 'action' => 'index'), array(1 => 'name', 2=>'type'), '%s-tour-%s');
$router->addRoute('tour', $route);
}
在控制器中打印出来' tour',action' index':
echo '<br>Name is: ' . $this->getParam('name') . '<br>Type is: ' . $this->getParam('type');
然后转到网址:&#39; / tour / sampleName-sampleType&#39;,您将看到结果:
名称是:sampleName
类型是:sampleType
一点糖:
实际上您的路线设置正确,但默认路由模式为:&#39; / tour / index / name / sampleName / type / sampleType&#39;,您的短划线(&#39; - &#39; )仅作为参数的分隔符,因为Zend不将其识别为连接字符串。
以下代码是为Zend项目添加此类路由的完整代码,供可能需要它的人使用。
在Bootstrap.php中
protected function _initRoutes ()
{
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$router = $front->getRouter();
$route = new Zend_Controller_Router_Route(':name/:type', array('controller' => 'tour', 'action' => 'index'));
$router->addRoute('tour', $route);
}
在控制器中打印出来:
echo '<br>Name is: ' . $this->getParam('name') . '<br>Type is: ' . $this->getParam('type');