2016-11-11 2 views

答えて

0

というようにさまざまな方法があります。すべてのモデルイベントをキャッチする場合は、ワイルドカードリスナーを登録できます。ブート方法であなたのApp\Providers\EventServiceProviderでワイルドカードリスナーを登録します。

public function boot() 
{ 
    parent::boot(); 

    Event::listen('eloquent.*', function (array $data) { 
     broadcast(new YourModelEventListener($data)); 
    }); 
} 

それとも、それぞれのモデルのために別々のロジックを維持したい場合は、すべてのイベントをキャッチし、あなたの放送ハンドラに送信クラスオブザーバを作成することができます。

オブザーバーに続いて、観察

class MyModel extends Model 
{ 
    protected static function boot() 
    { 
     parent::boot(); 

     static::observe(new MyModelObserver); 
    } 
} 

を登録します。

class MyModelObserver 
{ 
    public function broadcast($method, $model) 
    { 
     broadcast(new YourModelEventListener($method, $model)); 
    } 

    public function creating($model) 
    { 
     $this->broadcast('creating', $model); 
    } 

    public function updating($model) 
    { 
     $this->broadcast('updating', $model); 
    } 
} 
+0

ブロードキャスト機能のブロードキャストチャンネルはどこですか? –

+0

https://laravel.com/docs/master/broadcasting#broadcasting-eventsこちらのドキュメントを参照してください。 'ShouldBroadcast'インタフェースhttps:/を実装している' YourModelEventListener'クラスの 'broadcastOn()'メソッドでチャネルを定義します。 /laravel.com/docs/master/broadcasting#defining-broadcast-events –

+0

私はShouldBroadcastのインターフェースを持つ新しいイベントを作ります 私が作ったイベントの新しいリスナーを作るところ これはラッパーや何かのように? このような? モデルイベント - > MyBroadCastEvent - > MyBroadCastEventListener? –

0
public MyBroadCastEvent implements ShouldBroadcast { 
    public function broadcastOn() { 
      return ['test']; 
    } 
} 


public MyBroadCastEventListener { 
    public function handle(MyBroadCastEvent $event) { 
      // should i remove that type hint? 
      // then do something here 
    } 
} 

は、このを呼びますか?

ブロードキャスト(新しいMyBroadCastEventListener($ data)); ?