我需要在每个模块中实现特定事件发生时的事件触发器。我还需要在触发该事件时必须执行某些工作的所有其他模块,请注意它。
我正在尝试创建一些可以发送触发器的公共端点,以及所有模块都需要监听的位置,但是我无法弄清楚如何实现这一点。
有什么想法吗?
答案 0 :(得分:14)
基于对@Andrew的回答的评论,只要你的控制器扩展AbstractActionController
(它很可能会这样做)它已经知道了EventManager,所以你可以继续前进并触发你喜欢的任何事件。控制器动作只需做......
<?php
namespace Application/Controller;
// usual use statements omitted for brevity ..
class IndexController extends AbstractActionController
{
public function indexAction()
{
// trigger MyEvent
$this->getEventManager()->trigger('MyEvent', $this);
}
}
要在其他模块的引导程序中侦听该事件,请执行以下操作
public function onBootstrap(EventInterface $e)
{
$app = $e->getApplication();
// get the shared events manager
$sem = $app->getEventManager()->getSharedManager();
// listen to 'MyEvent' when triggered by the IndexController
$sem->attach('Application\Controller\IndexController', 'MyEvent', function($e) {
// do something...
});
}
答案 1 :(得分:3)
关于此,有几篇好文章:
http://www.mwop.net/blog/266-Using-the-ZF2-EventManager.html
http://www.eschrade.com/page/zend-framework-2-event-manager/
让模块监听应用程序范围内的事件,然后在触发时执行某些任务非常容易。这两个中应该有足够的信息来帮助你入门。
如果你举一个你想要的例子,我可以提供一个如何实现它的例子。