Zend Framework örneğini görmek için postDispatch bir değişkeni () geçmek

3 Cevap php

I postDispatch() kanca ile bir kontrolör eklenti var ve orada bir $variable var.

Nasıl view Örneğin bu değişken geçmek için?

I Zend_Layout::getMvcInstance()->getView() çalıştı, ama bu yeni görünüm örneği (değil uygulama kaynak) döndürür. Ile aynı $bootstrap->getResource('view').

I don't want to pass it as a request param.
Now, as a workaround I do it using Zend_Registry.

Ama en iyi yolu nedir?

3 Cevap

Ben bunu ihtiyacım görünüm elde etmek ViewRenderer eylem yardımcı kullanarak oldum. Bu Zend sınıfları görünümü nesneye erişmek en yaygın yolu gibi görünüyor.

So, in the controller plugin:

class App_Controller_Plugin_ViewSetup extends Zend_Controller_Plugin_Abstract {

  public function postDispatch() {

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

    echo $view->variable;

    $view->variable = 'Hello, World';

  }

}

In the controller:

class IndexController extends Zend_Controller_Action {

  public function indexAction() {

    $this->view->variable = 'Go away, World';

  }

}

In the view script:

<?php echo $this->variable; ?>

The output is: Gidin, WorldGo uzakta, Dünya

Sorun bu does ana görünümü nesnesini döndürmek çünkü œkod, postDispatch () yöntemi çağrılmadan önce kılmasıdır gibi görünüyor.

in the plugin:

class App_Plugin_MyPlugin extends Zend_Controller_Plugin_Abstract{


public function preDispatch (Zend_Controller_Request_Abstract $request){
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->setNeverRender(true);
}

public function postDispatch(Zend_Controller_Request_Abstract $request){
   $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
   $view = $viewRenderer->view;
   $view->variable = 'new value';
   $viewRenderer->render();

}

}

In the controller:

sınıf IndexController Zend_Controller_Action {uzanır

  public function indexAction() {

    $this->view->variable = 'value';

  }

}

In the view script:

<?php echo $this->variable; ?>

Çıktısı: yeni değer

class ZFExt_Controller_Plugin_Passvar extends Zend_Controller_Plugin_Abstract 
{
    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {

        $view = Zend_Controller_Front::getInstance()
                      ->getParam('bootstrap')
                      ->getResource('view');
        $view->variable = 'Hi there';
    }
}

Sonra görünümü komut

<p><?php echo $this->variable; ?></p>