使用Zend_Controller_Router_Route和URL视图助手时出现urlencode()错误

时间:2009-09-30 06:03:04

标签: php zend-framework

我使用Zend Framework中的标准路由器来路由系统中的大多数URL。

对于一个特定的URL,我想通过控制器别名(除真实控制器之外)访问它

例如。

实际网址:

/mymodule/mycontroller/myaction/*

别名网址:

/mymodule/mycontrolleralias/myaction/*

mycontrolleralias不是一个真正的控制器,但我希望它有任何请求路由到mycontroller(查询参数和所有)

为此,我尝试设置此路线:

$router->addRoute('controlleralias', new Zend_Controller_Router_Route(
    ':module/mycontrolleralias/:action/*',
    array(
        'module'     => 'mymodule',
        'controller' => 'mycontroller',
        'action'     => 'myaction'
    )
));

但是在我的视图帮助中,如果我尝试创建一个URL:

$this->view->url(array('sort' => array('param1','param2')));

我收到错误:

urlencode() expects parameter 1 to be string, array given

#0 [internal function]: __lambda_func(Array)
#1 /library/Zend/Controller/Router/Route.php(398): urlencode(Array, false, true)
#2 /library/Zend/Controller/Router/Rewrite.php(441): Zend_Controller_Router_Route->assemble(Array, NULL, false, true)
#3 /library/Zend/View/Helper/Url.php(49): Zend_Controller_Router_Rewrite->assemble(Array)

如果我从自定义路线中删除星号(*),则不会发生错误 - 但我视图中生成的网址不正确,因为它们与查询参数不匹配:

$router->addRoute('controlleralias', new Zend_Controller_Router_Route(
    ':module/mycontrolleralias/:action',
    array(
        'module'     => 'mymodule',
        'controller' => 'mycontroller',
        'action'     => 'myaction'
    )
));

我还发现如果我传入参数的数组,它将生成错误:

$this->view->url(array('sort' => 'param1'));

不幸的是,我确实需要为'sort'传递一个数组(如上所示)

有谁知道我做错了什么?也许有一种更简单的方法来实现这一目标?

我正在使用Zend Framework 1.9.0

1 个答案:

答案 0 :(得分:0)

我认为你应该这样做,

$this->view->url(array('sort' => 'param1,param2'),'controlleralias');

参数不能是数组,因为它基于urlencode。