предварительная отправка не работает

У меня небольшая проблема, у меня есть контроллер, расширяющий AbstractActionController, и мне нужно вызвать какую-то функцию перед любым действием, например, indexAction, я думаю, что preDispatch() вызывается перед любым действием, но когда я пытаюсь использовать этот код в $this->view->test, ничего.

class TaskController extends AbstractActionController
{
 private $view;

 public function preDispatch()
 {
   $this->view->test = "test";
 }

 public function __construct()
 {
   $this->view = new ViewModel();
 }

 public function indexAction()
 {
   return $this->view;
 }
}

person user1499668    schedule 03.07.2012    source источник


Ответы (3)


Когда я хочу это сделать, я использую определенный метод onDispatch:

class TaskController extends AbstractActionController
{
  private $view;

  public function onDispatch( \Zend\Mvc\MvcEvent $e )
  {
    $this->view->test = "test";

    return parent::onDispatch( $e );
  }

  public function __construct()
  {
    $this->view = new ViewModel();
  }

  public function indexAction()
  {
    return $this->view;
  }
}

Также загляните на http://mwop.net/blog/2012-07-30-the-new-init.html для получения дополнительной информации о том, как работать с событием отправки в ZF2.

person superhero    schedule 28.12.2012
comment
спасибо, дьявол, я нашел это в Google, я забыл позвонить родителям при отправке... - person Ismael; 20.05.2014

Вам лучше сделать это в классе модуля и использовать EventManager для обработки события mvc следующим образом:

class Module
{
  public function onBootstrap( $e )
  {
    $eventManager = $e->getApplication()->getEventManager();
    $eventManager->attach( \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'preDispatch'), 100 );
  }

  public function preDispatch()
  {
    //do something
  }
}
person AlloVince    schedule 04.07.2012

И в одной строке:

public function onBootstrap(Event $e)
{
  $e->getTarget()->getEventManager()->attach('dispatch', array($this, 'someFunction'), 100);
}

Последняя цифра - вес. Как минус равно пост события.

Предварительно настроены следующие события:

const EVENT_BOOTSTRAP      = 'bootstrap';
const EVENT_DISPATCH       = 'dispatch';
const EVENT_DISPATCH_ERROR = 'dispatch.error';
const EVENT_FINISH         = 'finish';
const EVENT_RENDER         = 'render';
const EVENT_ROUTE          = 'route';
person michaelbn    schedule 04.07.2012