Laravel-イベント処理

イベントは、ユーザーがWebアプリケーションでトリガーされたさまざまなイベントをサブスクライブしてリッスンできるようにする単純なオブザーバー実装を提供します。Laravelのすべてのイベントクラスはに保存されていますapp/Events フォルダとリスナーはに保存されます app/Listeners フォルダ。

Webアプリケーションでイベントとリスナーを生成するための職人のコマンドを以下に示します-

php artisan event:generate

このコマンドは、上記のように、それぞれのフォルダーへのイベントとリスナーを生成します。

イベントとリスナーは、1つのイベントが互いに独立した複数のリスナーを持つことができるため、Webアプリケーションを分離するための優れた方法として機能します。artisanコマンドによって作成されたeventsフォルダーには、event.phpとSomeEvent.phpの2つのファイルが含まれています。それらはここに示されています-

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アプリケーションでイベントをブロードキャストするためにシリアル化を使用していること、および必要なパラメーターもこのファイルで初期化されていることを確認してください。

たとえば、イベントを登録するためにコンストラクターで順序変数を初期化する必要がある場合、次の方法で行うことができます。

public function __construct(Order $order) {
   $this->order = $order;
}

リスナー

リスナーは、登録されているイベントで言及されているすべてのアクティビティを処理します。職人の命令event:generate すべてを作成します 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さまざまなイベントを管理するための機能。単一のイベントを対象とするさまざまな独立したリスナーを作成できます。