Передайте переменную из postDispatch () для просмотра экземпляра в Zend Framework - PullRequest
1 голос
/ 28 марта 2010

У меня есть плагин контроллера с postDispatch() hook, и там у меня есть $variable.

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

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

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

Но разве это лучший способ?

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

в плагине:

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

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

2 голосов
/ 28 марта 2010

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

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

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

Вывод: Уходи, Мир Уходи, Мир

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

0 голосов
/ 21 февраля 2013
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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...