| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?php
- namespace Illuminate\Database\Eloquent;
- use Illuminate\Broadcasting\InteractsWithSockets;
- use Illuminate\Broadcasting\PrivateChannel;
- use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
- use Illuminate\Queue\SerializesModels;
- class BroadcastableModelEventOccurred implements ShouldBroadcast
- {
- use InteractsWithSockets, SerializesModels;
- /**
- * The model instance corresponding to the event.
- *
- * @var \Illuminate\Database\Eloquent\Model
- */
- public $model;
- /**
- * The event name (created, updated, etc.).
- *
- * @var string
- */
- protected $event;
- /**
- * The channels that the event should be broadcast on.
- *
- * @var array
- */
- protected $channels = [];
- /**
- * The queue connection that should be used to queue the broadcast job.
- *
- * @var string
- */
- public $connection;
- /**
- * The queue that should be used to queue the broadcast job.
- *
- * @var string
- */
- public $queue;
- /**
- * Indicates whether the job should be dispatched after all database transactions have committed.
- *
- * @var bool|null
- */
- public $afterCommit;
- /**
- * Create a new event instance.
- *
- * @param \Illuminate\Database\Eloquent\Model $model
- * @param string $event
- * @return void
- */
- public function __construct($model, $event)
- {
- $this->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;
- }
- }
|