本文译自 Matt Stauffer 的系列文章.
创建一个事件及其处理程序,再把两者关联起来,或者创建一个命令及其处理程序,再把两者关联起来。有时候这看起来需要大量的工作。因此我经常期望能有一个工作流可以把所有这些工作整合在一起来处理。
用来创建事件和命令的 Artisan 命令是一个很好的开始,它能同时创建命令或事件的实体并且同时生成它们的处理程序(可选的)。但编写命令和处理程序依然需要花费个把小时的时间,然后还得再花另外的 15 分钟来调试它们。或许花了大量的时间之后才发现问题其实只是因为你没有把它们绑定起来……
好在,我们的紧张等待终于结束了。在 Laravel 5 中,你可以在 EventServiceProvider
中绑定(不存在的)事件和处理程序,只要执行 php artisan event:generate
, Artisan 就会自动生成全部文件,包括事件和对应的处理程序。
先看一下事件和处理程序的目录:
app/ Events/ Event.php Handlers/ Events/
1) 打开 app/providers/EventServiceProvider.php
, 找到 $listen
属性,通常情况下我们就在这里进行事件绑定,按照下面的格式添加一条绑定:
protected $listen = [ DidSomethingEvent::class => [ RespondOneWay::class, RespondAnotherWay::class ] ];
2) 执行 php artisan event:generate
3) 搞定。
检查一下:
app/ Events/ Event.php DidSomethingEvent.php Handlers/ Events/ RespondOneWay.php RespondAnotherWay.php
事件和处理程序已经自动创建并且做好绑定,直接可用!如果打开代码,你可以看到它们甚至还做了类型约束:
namespace App\Handlers\Events; ... class RespondOneWay { ... public function handle(DidSomethingEvent $event) { } }
太棒了!就这么简单!现在你就可以抽象地设计你的事件系统了——你可以在不用编写任何命令或者处理程序的情况下规划整个事件系统。当你设计完成后,只要执行一条简单的命令,就能生成你规划的所有事件和处理程序。