我的路线设置:
Zend_Controller_Front::getInstance()
->getRouter()
->addRoute('view', new Zend_Controller_Router_Route('controller/action/:name'))
我在视图中的链接:
$this->url(array("name" => "John"), "view", TRUE);
// returns "controller/action/John" as should
现在,当我在controller/action/John
时,如何从网址获取name
?我试过了
$this->getRequest()->getParam("name");
但名称参数不存在 - getRequest()
仅返回控制器,动作和模块参数。
答案 0 :(得分:1)
设置路由配置时,路由定义应直接匹配控制器/操作名称或设置为默认值。实际上,在任何情况下设置默认值都是很好的做法,可以帮助您避免这样的问题。
因此,根据您的评论,您的路线可能看起来像这样。
$defaults = array(
'controller'=> 'offers',
'action' => 'view',
'name' => ''
);
$route = new Zend_Controller_Router_Route('offers/view/:name',$defaults);
如评论中所述,您可以随时查看Zend_Controller_Front::getInstance()->getRouter()->getCurrentRouteName()
使用的路线。如果它没有显示您的预期路由,则路由器无法找到匹配项并继续前进,直到它通常以“默认”路由结束。
作为您的问题的旁注:当您使用$this->url(array("name" => "John"), "view", TRUE)
时,您只能根据路线创建链接。此方法只是视图的一部分,在调度控制器或操作方面没有任何作用。
答案 1 :(得分:0)
对于那些发现此问题并供将来参考的人,您可以使用以下方法从路由中获取params:$this->params()->fromRoute('param1', 0);
至少在Zend Framework 2中。这是我在这个问题中寻找的。 p>