我的应用程序中有一些组成导航树的页面。我想使用请求的值动态地将页面插入到我的导航中。我已经有了查找页面的逻辑,然后在其上调用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
方法。
答案 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()
查看帮助程序这应该很容易。您需要知道的其余部分:
preDispatch
方法编写控制器插件,并在上面添加然后在插件中,您可以像往常一样在视图中操作导航视图助手。
希望这澄清了一些事情。
答案 2 :(得分:0)
为什么不将实例存储在Zend_Registry中,然后在插件,模块引导程序或动作控制器的postDispatch中将页面添加到原始导航?