【发布时间】:2017-05-16 02:53:30
【问题描述】:
所以我使用 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 模型类中的一个或多个函数。我想在我调查的时候看看是否有其他人需要这样做。
【问题讨论】:
-
IMO,当涉及其他上下文时,这种事情不属于您的模式。我通常不喜欢自定义模型事件的想法。我相信触发事件应该是明确的事情,而不是改变模型实例的副作用。如果你将这两个问题分开(更新模型和触发事件),你可以使用一个实际的 Event 类作为你的
$user、$type和其他任何东西的值对象。 -
所以我主要使用 Observables 只是为了让我的模型范围更干净。这些真的只会触发事件,它只是让我的自定义事件更清晰,更容易遵循。我将在上面更新我的代码。
-
直到最近我实际上一直在模型中触发事件,因为我喜欢 observables 数组和单独文件中的事件触发逻辑。使跟踪它们变得更容易。似乎对可观察事件触发的合并疏忽不接受像 Event::fire 这样的参数列表,但我必须四处挖掘。