从Zend_Controller_Request创建Zend_Navigation_Page_Mvc实例

时间:2010-12-08 15:46:00

标签: php zend-framework zend-framework-mvc

我的应用程序中有一些组成导航树的页面。我想使用请求的值动态地将页面插入到我的导航中。我已经有了查找页面的逻辑,然后在其上调用addPage()方法。我正在寻找的是如何轻松地将Zend_Controller_Request值传递给Zend_Navigation_Page::factory(),以便我可以添加该页面。甚至可能写成插件?


解决方案

AngelP得到了最接近的,所以我给了他信任,但这是我的解决方案:

$request = $this->getRequest();
if ($page = $this->view->siteNav->findBy('id', $page_id)) {
    $page->addPage(Zend_Navigation_Page::factory($request->getParams())
            ->setParams($request->getParams())
            ->setLabel($this->view->title)
            ->setVisible(false));
}

此代码从控制器操作执行。 $this->view->siteNav是我在视图中的Zend_Navigation实例。来自getParams()实例的Zend_Controller_Request可以轻松传递到Zend_Navigation_Page::factory(),然后传递到setParams()实例的Zend_Navigation_Page_Mvc方法。

3 个答案:

答案 0 :(得分:1)

目前我的资源有限,所以我无法真正检查我的建议,但如果你在控制器中,你为什么不这样做..


$controller = $this->_request->getControllerName();
$action = $this->_request->getActionName();

$page = new Zend_Navigation_Page( array(
                   'label' => "Sonny's Page",
                   'controller' => $controller,
                   'action' => $action
));

也许您可以将其用作插件,以便重载视图?然后添加到导航容器?

干杯,
天使

答案 1 :(得分:1)

由于我们不知道您已编写的代码,我只是猜测......

你需要:

  • 检索navigation()查看帮助程序
  • 中使用的实际Zend_Navigation容器
  • 从请求中检索的数据数组
  • 创建新的Zend_Navigation_Page实例
  • 将页面添加到容器
  • 将新容器分配给导航助手

这应该很容易。您需要知道的其余部分:

  • 如何使用preDispatch方法编写控制器插件,并在上面添加
  • 如何访问此插件中的当前视图实例(从视图渲染器或应用程序资源/ bootstrap)

然后在插件中,您可以像往常一样在视图中操作导航视图助手。

希望这澄清了一些事情。

答案 2 :(得分:0)

为什么不将实例存储在Zend_Registry中,然后在插件,模块引导程序或动作控制器的postDispatch中将页面添加到原始导航?