如何将自定义事件添加到 Laravel 模型
How to add custom event to a Laravel model
我有付款模式,想在确认付款后触发自定义事件。
我的型号代码:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Payment extends Model
{
protected $dates = [
'created_at', 'updated_at', 'confirmed_at',
];
public function confirmed(){
$this->setAttribute('confirmed_at', now());
$this->setAttribute('status', 'confirmed');
}
}
我可以在 Payment->confirmed()
方法中触发一个 confirmed
事件,如下所示:
public function confirmed(){
// todo, throw an exception if already confirmed
$this->setAttribute('confirmed_at', now());
$this->setAttribute('status', 'confirmed');
// fire custom event
$this->fireModelEvent('confirmed');
}
并将自定义事件注册到 $dispatchesEvents
protected $dispatchesEvents = [
'confirmed' => \App\Events\Payment\ConfirmedEvent::class
];
完成。
\App\Events\Payment\ConfirmedEvent::class
事件将在模型 confirmed()
方法被调用时调用。
还建议在 confirmed() 方法调用两次时抛出异常。
你可以使用 Attribute Events:
protected $dispatchesEvents = [
'status:confirmed' => PaymentConfirmed::class,
];
遇到这个问题并找到了另一种可能对其他人有帮助的方法。
目前还有一个选项可以利用观察者,而不必创建自定义事件 类。
在您的模型中添加以下内容 属性:
protected $observables = ['confirmed'];
此 属性 是 HasEvents
特征的一部分,并将此事件注册为 eloquent 事件 (eloquent.confirmed: \App\Payment
)。
您现在可以向观察者添加方法:
public function confirmed(Payment $payment);
您现在可以触发事件并调用观察者方法:
$this->fireModelEvent('confirmed');
或在模型之外(因为 fireModelEvent
是 protected
):
event('eloquent.confirmed: ' . Payment::class, $payment);
我有付款模式,想在确认付款后触发自定义事件。
我的型号代码:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Payment extends Model
{
protected $dates = [
'created_at', 'updated_at', 'confirmed_at',
];
public function confirmed(){
$this->setAttribute('confirmed_at', now());
$this->setAttribute('status', 'confirmed');
}
}
我可以在 Payment->confirmed()
方法中触发一个 confirmed
事件,如下所示:
public function confirmed(){
// todo, throw an exception if already confirmed
$this->setAttribute('confirmed_at', now());
$this->setAttribute('status', 'confirmed');
// fire custom event
$this->fireModelEvent('confirmed');
}
并将自定义事件注册到 $dispatchesEvents
protected $dispatchesEvents = [
'confirmed' => \App\Events\Payment\ConfirmedEvent::class
];
完成。
\App\Events\Payment\ConfirmedEvent::class
事件将在模型 confirmed()
方法被调用时调用。
还建议在 confirmed() 方法调用两次时抛出异常。
你可以使用 Attribute Events:
protected $dispatchesEvents = [
'status:confirmed' => PaymentConfirmed::class,
];
遇到这个问题并找到了另一种可能对其他人有帮助的方法。
目前还有一个选项可以利用观察者,而不必创建自定义事件 类。
在您的模型中添加以下内容 属性:
protected $observables = ['confirmed'];
此 属性 是 HasEvents
特征的一部分,并将此事件注册为 eloquent 事件 (eloquent.confirmed: \App\Payment
)。
您现在可以向观察者添加方法:
public function confirmed(Payment $payment);
您现在可以触发事件并调用观察者方法:
$this->fireModelEvent('confirmed');
或在模型之外(因为 fireModelEvent
是 protected
):
event('eloquent.confirmed: ' . Payment::class, $payment);