Zend: Nasıl küresel mevcut navigasyon öğeyi ayarlayabilirsiniz?

1 Cevap php

config:

resources.frontController.plugins.nav = "WD_Controller_Plugin_Nav"

bootstrap:

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 output:

Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'FindByUri' was not found in the registry

Ben hemen hemen bu ben direk Navigasyon (findByUri yöntemi doğrudan Zend_Navigation var) Zend Görünüm Yardımcısı Navigasyon başvuran ve değilim, ben ne yapıyorum yanlış biliyorum, ama ben düzgün başvuru nasıl emin değilim.

1 Cevap

Kontrolörler yapmak gibi Kontrolör eklentileri, varsayılan görünümü nesnesine bir başvuru yok. Sizin bakış örneği kapmak için farklı şekillerde bol vardır.

Bir, ViewRenderer aksiyon yardımcısı aracılığıyla şöyle:

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

Sizin düzeni İki:

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

Ya da, her zaman olduğu gibi, uygulama bootstrap gelen. Ama bunu kurmak nasıl bağlıdır.

Bunu yaptığınızda, all Gezinti görünümü yardımcıları sizin için geçerli bir getContainer() yöntem yoktur. Bu yüzden,

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

Sizin için çalışması gerektiğini,