Laravel - 事件处理

  • 简述

    事件提供了一个简单的观察者实现,允许用户订阅和侦听 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;
    }
    

    听众

    侦听器处理正在注册的事件中提到的所有活动。工匠命令event:generate创造了所有的listeners在里面app/listeners目录。Listeners 文件夹包含一个文件EventListener.php它具有处理侦听器所需的所有方法。

    事件监听器.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管理各种事件的功能。我们可以创建针对单个事件的各种独立侦听器。