Zend:我如何全局设置当前导航项?

时间:2010-01-21 16:36:36

标签: php zend-framework zend-navigation

配置:

resources.frontController.plugins.nav = "WD_Controller_Plugin_Nav"

自举:

protected function _initAutoloader() {
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('WD_');
return $loader;
}

protected function _initNav() {
  $this->bootstrap('layout');
  $layout = $this->getResource('layout');
  $view = $layout->getView();
  $config = new Zend_Config_Xml( APPLICATION_PATH . '/configs/navigation.xml', 'nav');
  $navigation = Zend_Navigation( $config );

  $fc = Zend_Controller_Front::getInstance();
  $fc->registerPlugin( new WD_Controller_Plugin_Nav() );
  $view->navigation( $navigation );
}

库/ WD /控制器/插件/ Nav.php:

class WD_Controller_Plugin_Nav extends Zend_Controller_Plugin_Abstract {

    public function postDispatch() {
        $uri = $this->_request->getPathInfo();
            $view = Zend_Layout::getMvcInstance()->getView();
        $activeNav = $view->navigation()->findByUri($uri)->setActive(true);
    }
}

网络输出:

  

未捕获的异常   'Zend_Loader_PluginLoader_Exception'   消息'按名称插件   找不到'FindByUri'   注册表

我几乎知道我做错了什么,因为我引用的是Zend View Helper Navigation而不是直接导航(直接在Zend_Navigation中存在findByUri方法),但我不确定如何正确引用它。

1 个答案:

答案 0 :(得分:1)

默认情况下,控制器插件没有对视图对象的引用,就像控制器一样。抓取视图实例有很多种不同的方法。

一,通过ViewRenderer动作助手,如下:

$view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;

两,来自您的布局:

$view = Zend_Layout::getMvcInstance()->getView();

或者,一如既往,从您的应用程序引导程序。但这取决于你如何设置它。

完成此操作后,所有导航视图助手都可以使用getContainer()方法。所以,

$container = $view->navigation()->getContainer();

应该适合你,