Laravel入坑指南(10)——事件Event
不知不觉,我们已经来到了第10小节。这一小节,我们一起讨论关于“事件”这个话题。众所周知,从二进制到汇编,再到高等级语言,这一路发展下来,代码都是顺序执行的,那么事件是什么?这个事件上本没有事件,纠结的人多了也就有了事件。
如果你也是编程界的泥石流,你就会发现事件发源于消息(或者信号),当代码执行到某个特殊时刻想要做一件事情,我们就调用一个函数来处理,而这个函数就是我们说的“事件”。
跟据上面的讨论,大家会发现,事件的普遍概念即是“函数调用”。所以它的好处不言而喻,那就是代码语义化以及降低代码的耦合度。当某个事情不处理了,我们取消事件函数的调用就行,就不需重新对主要的业务流程进行覆盖测试。
Laravel框架的事件机制的实现,也是这种思维。一个事件(类)匹配一个侦听器(类),由对应的侦听器处理对应的事件。下面就让我们一起了解Laravel中事件如何使用:
1、创建事件
在创建事件之前,我们需要在/app/Providers/EventServiceProvider.php中的$listen一节中进行配置。如下图:
上图的配置说明 ,有个MyEvent事件类,一旦这个事件类被触发,则由MyListener这个侦听器类进行处理。
接下来,在项目的根目录中执行以下命令,自动生成MyEvent和MyListener两个类:
php artisan event:generate
生成后的结果,如下所示:
2、事件分布与响应
1) 事件的分发
event(new MyEvent()); //根据真实的MyEvent构造函数进行实例化
2) 事件的响应
因为MyEvent对应的侦听器是MyListener,所以事件的响应即是MyEvent类中的handler函数:
class MyListener { /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param MyEvent $event * @return void */ public function handle(MyEvent $event) { //在这里进行处理 } }
写在后面:在这一篇事件讨论话题中,所有的事件分发和响应都是同步执行的,虽然实现的位置不一样,但是一样的流水线执行。如果碰到像类似于发邮件这种耗时的操作,我们就需要采用异步执行,这时就需要列队。Laravel提供了列队的机制与配置,下一期我们讨论完成列队之后,我们会花点时间讨论一下列队异步事件的实现。
这一篇就先到这里了,大家下期见:)
--------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。