2010-12-08 95 views
1

我的应用程序中有构成导航树的页面。我想使用请求的值动态地将页面插入到我的导航中。我已经有了查找页面的逻辑,然后调用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()方法。

回答

1

我已经在目前有限的资源,所以我真的不能查我的建议,但如果你在你控制的时候,你为什么不..

 

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

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

也许你可以使用它作为一个插件所以你超载你的看法?然后添加到您的导航容器?

干杯,
天使

+0

我知道如何通过使用手动构建的key =>值数组来构建`Zend_Navigation_Page`,但希望通过使用`Zend_Controller_Request`中的某些方法来获得一些快捷方式。 – Sonny 2010-12-08 22:15:45

0

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

+0

我没有按照你的回答。我在视图变量中设置了`Zend_Navigation`实例。我对这部分没有问题。我想在特定的控制器动作中添加页面,并且我已经知道如何完成该部分。我不知道的是如何使用Zend_Controller_Request简单地创建一个Zend_Navigation_Page_Mvc实例。 – Sonny 2010-12-08 16:55:34

1

因为我们不知道你已经写的代码,我只是猜测......

您需要:

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

这应该很容易。剩下的,你需要知道:

  • 如何写控制器插件与preDispatch方法,并把有上述情况,
  • 如何在这个插件访问当前视图实例(从视图渲染器或应用程序资源/ bootstrap)

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

希望这个澄清了一些事情。

+0

从“您需要:”列表我有步骤1,3和4全部解决。它希望能够通过调用`$ this-> getRequest()`来从控制器动作中可用的`Zend_Controller_Request`实例中的方法创建一个`Zend_Navigation_Page`实例。 – Sonny 2010-12-08 22:19:07