0

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

应用程序/模型/MealFood

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

应用程序/事件/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;
}

是否可以检测到触发事件的模型动作?我希望能够知道触发事件的记录是否已创建/更新/删除。知道我正在使用软删除来检查记录是否被删除,但我怎么知道记录是否已更新或创建?

4

1 回答 1

1

创建 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抽象,因为您永远不需要直接创建它的实例。

于 2022-01-15T07:20:53.177 回答