我使用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
答案 0 :(得分:0)
我认为你应该这样做,
$this->view->url(array('sort' => 'param1,param2'),'controlleralias');
参数不能是数组,因为它基于urlencode。