2016-11-11 196 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」接口的YourModelEventListener類的'broadcastOn()'方法中定義頻道https:/ /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 
    } 
} 

然後再調用這個?

broadcast(new MyBroadCastEventListener($ data)); ?