Php Laravel观察员-有没有办法传递额外的参数?

Php Laravel观察员-有没有办法传递额外的参数?,php,laravel,events,Php,Laravel,Events,因此,我使用Laravel模型事件观察器触发自定义事件逻辑,但它们只接受模型作为单个参数。我想做的是调用一个自定义事件,我还可以向它传递一些额外的参数,这些参数反过来会传递给Observer方法。大概是这样的: $this->fireModelEvent('applied', $user, $type); 然后在观察者中 /** * Listen to the applied event. * * @param Item $item

因此,我使用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模型类中的一个或多个函数。我想在我调查的时候看看是否有人需要这么做


我通过使用trait实现一些自定义模型功能来完成这项任务

/**
 * 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;
}

在我看来,当涉及其他上下文时,这种事情不属于您的模式。我通常不喜欢自定义模型事件的想法。我相信触发事件应该是一件明确的事情,而不是更改模型实例的副作用。如果将这两个关注点分开(更新模型和触发事件),则可以使用实际的事件类作为
$user
$type
,以及其他任何对象的值对象。因此,我主要使用可观察对象,只是为了保持模型范围更清晰。这些确实是唯一的fire事件,它只是让我的自定义事件更干净,更容易遵循。我将更新上面的代码。直到最近,我实际上一直在模型中触发事件,因为我喜欢单独文件中的observables数组和事件触发逻辑。使跟踪它们变得更容易。在合并可观察事件触发时,不接受event::fire那样的参数列表似乎是一个疏忽,但我必须仔细研究一下。