1

構成:

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 );
}

library / WD / Controller / Plugin / 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);
    }
}

Web出力:

キャッチされなかった例外'Zend_Loader_PluginLoader_Exception'とメッセージ'Pluginby name'FindByUri'がレジストリに見つかりませんでした

ナビゲーションを直接参照するのではなく、Zend View Helperナビゲーションを参照している(findByUriメソッドはZend_Navigationに直接存在する)という点で、私が間違っていることはほぼわかっていますが、適切に参照する方法がわかりません。

4

1 に答える 1

1

コントローラプラグインには、コントローラのように、デフォルトではビューオブジェクトへの参照がありません。ビューインスタンスを取得するには、さまざまな方法があります。

1つは、ViewRendererアクションヘルパーを介して、次のようになります。

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

2つ、レイアウトから:

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

または、いつものように、アプリケーションのブートストラップから。しかし、それはあなたがそれをどのように設定するかに依存します。

これを行うと、すべてのナビゲーションビューヘルパーgetContainer()で使用できるメソッドがあります。それで、

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

あなたのために働くはずです、

于 2010-01-21T16:51:40.767 に答える