目录

Laravel - 事件处理( Event Handling)

事件提供了一个简单的观察器实现,允许用户订阅和监听Web应用程序中触发的各种事件。 Laravel中的所有事件类都存储在app/Events文件夹中,侦听器存储在app/Listeners文件夹中。

用于在Web应用程序中生成事件和侦听器的artisan命令如下所示 -

php artisan event:generate

如上所述,该命令生成各个文件夹的事件和监听器。

事件生成器

事件和监听器提供了一种解耦Web应用程序的好方法,因为一个事件可以有多个彼此独立的监听器。 artisan命令创建的events文件夹包含以下两个文件: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;
}

听众(Listeners)

监听器处理正在注册的事件中提到的所有活动。 artisan命令event:generateapp/listeners目录中创建所有app/listeners 。 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功能。 我们可以创建针对单个事件的各种独立侦听器。

↑回到顶部↑
WIKI教程 @2018