model = $model; $this->event = $event; } /** * The channels the event should broadcast on. * * @return array */ public function broadcastOn() { $channels = empty($this->channels) ? ($this->model->broadcastOn($this->event) ?: []) : $this->channels; return collect($channels)->map(function ($channel) { return $channel instanceof Model ? new PrivateChannel($channel) : $channel; })->all(); } /** * The name the event should broadcast as. * * @return string */ public function broadcastAs() { $default = class_basename($this->model).ucfirst($this->event); return method_exists($this->model, 'broadcastAs') ? ($this->model->broadcastAs($this->event) ?: $default) : $default; } /** * Get the data that should be sent with the broadcasted event. * * @return array|null */ public function broadcastWith() { return method_exists($this->model, 'broadcastWith') ? $this->model->broadcastWith($this->event) : null; } /** * Manually specify the channels the event should broadcast on. * * @param array $channels * @return $this */ public function onChannels(array $channels) { $this->channels = $channels; return $this; } /** * Determine if the event should be broadcast synchronously. * * @return bool */ public function shouldBroadcastNow() { return $this->event === 'deleted' && ! method_exists($this->model, 'bootSoftDeletes'); } /** * Get the event name. * * @return string */ public function event() { return $this->event; } }