2017-01-28 12 views
0

誰かが自分のシステム上のエンティティをお気に入りにしたときに私が発するイベントがあります。これはEvent::fire(new AddedAsFav($entity_id));を使用して発生します。クラスインスタンスではないイベントに変数を渡すにはどうすればよいですか?

その場合、私はそのことに関するいくつかの情報を引き出したいと思います$entity_id。これを行うには、$entity_idをリスナーのコンストラクタの一部として渡す必要があると思ってアクセスします。残念ながら、コンストラクタは型を予期しており、整数だけを渡すことはできません。ドキュメントには、Eloquent ORMインスタンスが渡される例がたくさんあります。ORMインスタンスの接頭辞には、クラス名(たとえば、Entity $entity)が付いています。しかし、私は完全なオブジェクト、IDだけを渡すことはしません。それは、それが出てくるコントローラーがIDしか持っていないからです。私はむしろ、イベント自体の中でクエリ(これは高価で時間がかかるため、イベント)を行うでしょう。

基本的なintを渡してアクセスするにはどうすればよいですか?

ここに私のリスナーです:

<?php 

namespace App\Listeners; 

use App\Events\AddedAsFav; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 

class GetFullEntity 
{ 
    /** 
    * Create the event listener. 
    * 
    * @return void 
    */ 
    public function __construct(int $entity_id) 
    { 
     $this->entity_id = $entity_id; 
    } 

    /** 
    * Handle the event. 
    * 
    * @param MovieAddedAsToWatch $event 
    * @return void 
    */ 
    public function handle(AddedAsFav $event) 
    { 
     dd($event); 
    } 
} 

答えて

1

リスナーで使用したいと思うものだけをタイプキャストします。

あなたは単にあなたがイベントクラスに渡されるデータ/オブジェクト/配列にアクセスしたい場合は、イベントクラスのパブリックプロパティに割り当て:

class AddedAsFav extends Event 
{ 

    public $entity_id; 

    public function __construct($entity_id) 
    { 

     $this->entity_id = $entity_id; 

    } 
} 

あなたは今のように、あなたのリスナーにアクセスすることができます任意のプロパティ:

<?php 

namespace App\Listeners; 

use App\Events\AddedAsFav; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 

class GetFullEntity 
{ 
    /** 
    * Create the event listener. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 

    } 

    /** 
    * Handle the event. 
    * 
    * @param MovieAddedAsToWatch $event 
    * @return void 
    */ 
    public function handle(AddedAsFav $event) 
    { 
     $entity_id = $event->entity_id; 
    } 
} 
1

あなたイベントファイル内public $entity_idを持つことになります場合は、あなたがそうのようなリスナーのhandle方法でその値を取得することができます:$event->entity_id

関連する問題