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 );
}
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方法),但我不确定如何正确引用它。
答案 0 :(得分:1)
默认情况下,控制器插件没有对视图对象的引用,就像控制器一样。抓取视图实例有很多种不同的方法。
一,通过ViewRenderer动作助手,如下:
$view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;
两,来自您的布局:
$view = Zend_Layout::getMvcInstance()->getView();
或者,一如既往,从您的应用程序引导程序。但这取决于你如何设置它。
完成此操作后,所有导航视图助手都可以使用getContainer()
方法。所以,
$container = $view->navigation()->getContainer();
应该适合你,