Наблюдатели Laravel — Есть ли способ передать дополнительные аргументы?

Поэтому я использую наблюдатели событий модели Laravel для запуска пользовательской логики событий, но они принимают модель только как один аргумент. То, что я хотел бы сделать, это вызвать пользовательское событие, которое я также могу передать некоторым дополнительным аргументам, которые, в свою очередь, будут переданы методу Observer. Что-то вроде этого:

    $this->fireModelEvent('applied', $user, $type);

А потом в Обозревателе

    /**
* Listen to the applied event.
*
* @param  Item    $item
* @param  User    $user
* @param  string  $type
* @return void
*/
public function applied(Item $item, $user, string $type) {
Event::fire(new Applied($video, $user, $type));
}

Как вы можете видеть, я заинтересован в том, чтобы передать пользователю, который выполнил это действие, но не тот, который обязательно создал элемент. Я не думаю, что временные атрибуты модели являются ответом, потому что моя дополнительная логика событий ставится в очередь как задания, чтобы поддерживать как можно меньшее время отклика. У кого-нибудь есть идеи о том, как я могу расширить Laravel, чтобы позволить мне это сделать?

Моя теория заключается в том, чтобы создать пользовательскую черту, которая переопределяет одну или несколько функций в базовом классе модели Laravel, который обрабатывает эту логику. Думаю, я посмотрю, нужно ли кому-то еще делать это, пока я в этом разбираюсь.

Также вот ссылка на документы

1

Решение

Я выполнил эту задачу, реализовав некоторые пользовательские функциональные возможности модели, используя черту.

/**
* Stores event key data
*
* @var array
*/
public $eventData = [];/**
* Fire the given event for the model.
*
* @param  string  $event
* @param  bool    $halt
* @param  array   $data
* @return mixed
*/
protected function fireModelEvent($event, $halt = true, array $data = []) {
$this->eventData[$event] = $data;
return parent::fireModelEvent($event, $halt);
}/**
* Get the event data by event
*
* @param  string  $event
* @return array|NULL
*/
public function getEventData(string $event) {
if (array_key_exists($event, $this->eventData)) {
return $this->eventData[$event];
}

return NULL;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector