PHP - 什么是事件管理器?

时间:2014-01-19 11:14:30

标签: php cakephp zend-framework symfony

我在许多PHP框架中看到过使用“事件管理器”类。 “普通”MVC框架范围内的事件管理器究竟是什么?它通常为应用程序提供了什么?

3 个答案:

答案 0 :(得分:1)

通常,事件管理器允许应用程序的不同部分了解操作。

假设我有一个支付提供商的模块。支付提供商调用私人URL以返回支付状态。一旦我验证了付款状态,我就会发起一个事件来表明已付款。

负责处理交易客户方的代码可以收听这些事件,例如发送客户付款的电子邮件并生成发票。

答案 1 :(得分:1)

首先要read about event driven programming了解基本想法。

我认为您标记的每个框架都有一个关于事件系统的手册页。至少CakePHP has a pretty detailed one关于它的事件系统,它是event manager。对它的描述已经解释了事件管理器的一半:

  

事件管理员负责跟踪事件监听器,   将正确的数据传递给他们,并以正确的方式解雇他们   订单,当触发相关事件时。您可以创建多个   此对象的实例可以管理本地事件或保持单个事件   实例并传递它来管理应用中的所有事件。

事件管理器可以附加侦听器或接收器,侦听或“连接”到事件的对象。当事件被事件管理器触发并调度时,注册到一个或多个事件的所有侦听器都将接收事件对象实例并可以使用它。

小心事件正确使用它们很棒,不合适使用它们会使您的应用程序难以调试并且难以使用明白一团糟。不要仅仅因为它们很酷而使用它们,记录应用程序中的事件。

Here is an example of how to inject additional fields into a form使用CakePHP事件系统。此用例可能适合CMS,或者您必须通过插件系统有条件地向表单添加内容。

答案 2 :(得分:1)

简而言之,事件管理器提供了一种在应用程序中存储事件的方法,提供事件驱动的编程。您可以通过开发侦听它们并相应地做出反应的功能来利用已注册的事件。如果使用得当,事件管理器可以帮助解耦代码并使代码更精简,更可重用。

例如,假设您已经为客户编写了一个博客模块,它允许您管理简单的帖子。如果您在发布帖子时需要发送推文,则可以注册在发布后触发的事件,然后编写一个侦听该事件的进程,并发送推文。这两个过程都不​​需要知道另一个,因为逻辑上没有必要。两者都可以单独开发和测试,但可以一起工作。

相关问题