从Zend中的url获取参数

时间:2012-10-25 14:42:19

标签: php zend-framework url zend-route

我的路线设置:

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()仅返回控制器,动作和模块参数。

2 个答案:

答案 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中。这是我在这个问题中寻找的。