如何在ZF1路由中使用多个参数

时间:2014-03-30 05:53:58

标签: php zend-framework routes zend-route

我正在尝试向Zend Framework 1应用程序添加新路由。但它似乎理解我的两个参数作为一个。我该如何解决这个问题?

$route = new Zend_Controller_Router_Route(':name-:type', array('controller' => 'tour', 'action' => 'index'));
$route = $routeLang->chain($route);
$router->addRoute('tour', $route);

1 个答案:

答案 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');