Laravel 事件处理
事件提供了一个简单的观察者实现,它允许用户订阅和监听在 Web 应用程序中触发的各种事件。 Laravel的所有事件类都保存在app/Events文件夹中,而监听器则保存在app/Listeners文件夹中。
在 Web 应用程序中生成事件和监听器的 artisan 命令如下:
php artisan event:generate
如上所述,此命令为相应的文件夹生成事件和监听器。
事件和监听器是一种很好的解耦 Web 应用程序的方式,因为一个事件可以有多个彼此独立的监听器。 由artisan命令创建的事件文件夹包括以下两个文件:event.php 和 SomeEvent.php,如下所示:
Event.php
<?php namespace App\Events; abstract class Event{ // }
如上所述,event.php包括类Event的基本定义和对命名空间App/Events的调用。请注意,用户自定义的事件是在这个文件中创建的。
SomeEvent.php
<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class SomeEvent extends Event{ use SerializesModels; /** * Create a new event instance. * * @return void */ public function __construct() { // } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; } }
请注意,此文件使用序列化在 Web 应用程序中广播事件,并且必要的参数也在此文件中进行了初始化。
例如,如果我们需要在构造函数中初始化 order 变量来注册一个事件,我们可以通过以下方式进行:
public function __construct(Order $order) { $this->order = $order; }
监听器
监听器处理所有被注册的事件中提到的活动,artisan命令event:generate在app/listeners目录下创建监听器,监听器文件夹包含一个EventListener.php文件,它拥有处理监听器所需的所有方法。
EventListener.php
<?php namespace App\Listeners; use App\Events\SomeEvent; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class EventListener{ /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param SomeEvent $event * @return void */ public function handle(SomeEvent $event) { // } }
如代码中所述,它的handle()方法用于管理各种事件的处理,我们可以针对单个事件创建各种独立监听器。