Laravel 事件处理

Laravel 事件处理

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

生成 Web 应用程序中事件和监听器的 artisan 命令如下所示。

php artisan event:generate

该命令根据上述讨论生成事件和监听器到相应的文件夹中。

Laravel 事件处理

Events和Listeners提供了一种很好的方式来解耦一个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:generateapp/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(SomeEventevent) {
      //
   }
}

如代码中所述,它包含了 handle 函数,用于管理各种事件。我们可以创建多个独立的监听器来针对单个事件。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程