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

将数据从Module.php传递给控制器,php,zend-framework2,Php,Zend Framework2,如何将数据从模块类传递给控制器 我需要将数据从onBootstrap方法传递到所有模块控制器。最好的方法是什么。我可以使用$e->getTarget()访问控制器,但不知道如何将自定义数据传递给它。控制器可能有存储空间?控制器可以访问MvcEvent您可以设置一个事件侦听器,将任意数据附加到它,然后在控制器内获取它 Module.php public function onBootstrap(MvcEvent $event) { $event->setParam('foo', 'ba

如何将数据从模块类传递给控制器


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

控制器可以访问
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');

   });
}

什么数据
module.php
定义模块的服务;如果您想将它们注入控制器,那么您应该在
getControllerConfig
方法中创建一个工厂,并将它们传递到构造函数中。我正在module.php中检查身份验证令牌,并希望将该令牌传递给控制器,以将其与其他数据一起保存在日志中。我可以再次从请求中获取它,但我不想做两次相同的操作。也许可以使用事件侦听器在module.php中触发事件,并以这种方式传递变量。甚至不需要点击控制器,然后您可以显式地调用模块的名称空间作为标识符。Lukas需要将变量传递给所有模块控制器,即模块内的所有控制器。模块名(只要是单个命名空间部分)也是可调度控制器的标识符。谢谢。我尝试将param添加到控制器而不是event:)@JurianSluiman很好,感谢您的更正(我实际上将其理解为“所有控制器”)。Lukas,如果您只想将某个模块中的控制器作为目标,您可以将
Zend\Mvc\Controller\AbstractActionController
交换为
\uuuuuu命名空间\uuuuuu
。@AlexP为什么控制器的uu构造函数无法获取foo的参数值?我在构造函数中尝试了
$this->getEvent()->getParam('foo',false)
。但是参数不可用。