所以我使用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让我这样做的想法?
我的理论是做一个自定义特征,它覆盖处理这个逻辑的基本层次模型类中的一个或多个函数。我以为在看的时候我会看到是否有其他人需要这样做。
答案 0 :(得分: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;
}