查找触发事件的模型方法



我正在使用Laravel的Event&侦听器功能,用于检测以下模型操作并触发一些应用程序逻辑。

应用程序/型号/MailFood

/**
* The event map for the model.
*
* Allows for object-based events for native Eloquent events.
*
* @var array
*/
protected $dispatchesEvents = [
'created'  => MealFoodEvent::class,
'updated'  => MealFoodEvent::class,
'deleted'  => MealFoodEvent::class
];

app/events/MealFoodEvent

public $mealFood;
/**
* Create a new event instance.
*
* @param MealFood $mealFood
*/
public function __construct(MealFood $mealFood)
{
$this->mealFood = $mealFood;
}

应用程序/听众/MealFoodListener

public function handle(MealFoodEvent $event)
{
$mealFood = $event->mealFood;
}

是否可以检测触发事件的模型操作?我想知道触发事件的记录是否已创建/更新/删除。我知道我正在使用软删除来检查记录是否已删除,但我如何知道记录是更新还是创建的?

创建3个附加类:

MealFoodCreatedEvent.php

class MealFoodCreatedEvent extends MealFoodEvent {}

MealFoodUpdatedEvent.php

class MealFoodUpdatedEvent extends MealFoodEvent {}

MealFoodDeletedEvent.php

class MealFoodDeletedEvent extends MealFoodEvent {}

修改您的型号:

protected $dispatchesEvents = [
'created'  => MealFoodCreatedEvent::class,
'updated'  => MealFoodUpdatedEvent::class,
'deleted'  => MealFoodDeletedEvent::class
];

然后在您的事件处理程序中,您可以执行以下操作:

public function handle(MealFoodEvent $event)
{
$mealFood = $event->mealFood;
if ($event instanceof MealFoodCreatedEvent) { 
// the event was "created
}
}

handle的签名仍然有效,因为您的所有活动都扩展了MealFoodEvent

您也可以使MealFoodEvent抽象,因为您永远不需要直接创建它的实例。

最新更新