从Zend_Controller_Request创建一个Zend_Navigation_Page_Mvc实例
我的应用程序中有构成导航树的页面。我想使用请求的值动态地将页面插入到我的导航中。我已经有了查找页面的逻辑,然后调用addPage()
方法。我正在寻找的是如何轻松地将Zend_Controller_Request
值传递给Zend_Navigation_Page::factory()
,以便我可以添加该页面。也许甚至写成插件?从Zend_Controller_Request创建一个Zend_Navigation_Page_Mvc实例
解决方案
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
的一个实例。从Zend_Controller_Request
实例中的getParams()
很容易传递给Zend_Navigation_Page::factory()
,然后传递给Zend_Navigation_Page_Mvc
实例的setParams()
方法。
我已经在目前有限的资源,所以我真的不能查我的建议,但如果你在你控制的时候,你为什么不..
$controller = $this->_request->getControllerName();
$action = $this->_request->getActionName();
$page = new Zend_Navigation_Page(array(
'label' => "Sonny's Page",
'controller' => $controller,
'action' => $action
));
也许你可以使用它作为一个插件所以你超载你的看法?然后添加到您的导航容器?
干杯,
天使
为什么不将实例存储在Zend_Registry中,然后从插件,模块引导程序或操作控制器的postDispatch中将页面添加到原始的导航?
我没有按照你的回答。我在视图变量中设置了`Zend_Navigation`实例。我对这部分没有问题。我想在特定的控制器动作中添加页面,并且我已经知道如何完成该部分。我不知道的是如何使用Zend_Controller_Request简单地创建一个Zend_Navigation_Page_Mvc实例。 – Sonny 2010-12-08 16:55:34
因为我们不知道你已经写的代码,我只是猜测......
您需要:
- 检索实际Zend_Navigation在
navigation()
查看帮助中使用的容器 - 从请求中检索到的数据数组中创建新的Zend_Navigation_Page实例
- 页面添加到容器
- 新容器分配到导航帮助
这应该很容易。剩下的,你需要知道:
- 如何写控制器插件与
preDispatch
方法,并把有上述情况, - 如何在这个插件访问当前视图实例(从视图渲染器或应用程序资源/ bootstrap)
然后在插件中,您在视图中像往常一样操作导航视图助手。
希望这个澄清了一些事情。
从“您需要:”列表我有步骤1,3和4全部解决。它希望能够通过调用`$ this-> getRequest()`来从控制器动作中可用的`Zend_Controller_Request`实例中的方法创建一个`Zend_Navigation_Page`实例。 – Sonny 2010-12-08 22:19:07
我知道如何通过使用手动构建的key =>值数组来构建`Zend_Navigation_Page`,但希望通过使用`Zend_Controller_Request`中的某些方法来获得一些快捷方式。 – Sonny 2010-12-08 22:15:45