1

我的路线设置:

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如何获取namefrom URL?我试过了

$this->getRequest()->getParam("name");

但名称参数不存在 -getRequest()仅返回控制器、操作和模块参数。

4

2 回答 2

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)您仅根据路线创建链接。这个方法只是视图的一部分,在分派给控制器或动作方面没有任何作用。

于 2012-10-26T17:30:56.890 回答
0

对于那些发现这个问题并供将来参考的人,您$this->params()->fromRoute('param1', 0);至少可以在 Zend Framework 2 中使用以下方法从路由中获取参数:这就是我在这个问题中寻找的。

于 2012-11-10T20:29:20.480 回答