从Module.php将数据传递给控制器

时间:2014-04-11 10:28:32

标签: php zend-framework2

如何从Module类传递数据到控制器?

我需要将onBootstrap方法的数据传递给所有模块控制器。做这个的最好方式是什么。我可以使用$e->getTarget()访问控制器,但不知道如何将自定义数据传递给它。也许控制器有存储空间?

1 个答案:

答案 0 :(得分:1)

控制器可以访问MvcEvent你可以设置一个事件监听器来附加任意数据,然后在控制器中获取它。

<强> Module.php

public function onBootstrap(MvcEvent $event)
{
   $event->setParam('foo', 'bar');
}

<强>控制器

public function fooAction() {
  $foo = $this->getEvent()->getParam('foo', false);
}

@JonDay建议一个也能很好用的事件监听器。

public function onBootstrap(MvcEvent $event)
{
   $application  = $event->getApplication();
   $eventManager = $application->getEventManager()->getSharedManager();

   $eventManager->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($event) {
      $controller = $event->getTarget();

      // Set public property
      $controller->foo = 'bar';

      // OR protected with setter
      $controller->setFoo('bar');

   });
}
相关问题