2010-03-27 2 views
1

У меня есть плагин контроллера с крючком postDispatch(), и там у меня есть $variable.Передайте переменную из postDispatch(), чтобы просмотреть экземпляр в Zend Framework

Как передать эту переменную в экземпляр view?

Я пробовал Zend_Layout::getMvcInstance()->getView(), но это возвращает новый экземпляр представления (а не ресурс приложения). То же самое с $bootstrap->getResource('view').

Я не хочу передавать его в качестве параметра запроса.
Теперь, как обходное решение, я использую Zend_Registry.

Но, это лучший способ?

ответ

2

Я использую помощник действий ViewRenderer, чтобы получить представление, когда оно мне понадобится. Кажется, это самый распространенный способ доступа классов Zend к объекту view.

Так, в плагине контроллера:

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'; 

    } 

} 

В контроллере:

class IndexController extends Zend_Controller_Action { 

    public function indexAction() { 

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

    } 

} 

В скрипте вида:

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

Выход: Уходи, WORLDGO прочь, World

Похоже, что проблема заключается в том, что скрипт вида делает перед вызовом метода postDispatch(), так как это делает возвращают главный объект просмотра.

+0

Попробованная это уже. Это также возвращает новый экземпляр представления. – takeshin

3

в плагин:

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

} 

} 

В контроллере:

класс IndexController простирается Zend_Controller_Action {

public function indexAction() { 

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

    } 

}

В скрипте вида:

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

Выход: новое значение

0
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'; 
    } 
} 

Далее в скрипте вида

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