我正在使用 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;
}
是否可以檢測到觸發事件的模型動作?我希望能夠知道觸發事件的記錄是否已創建/更新/洗掉。知道我正在使用軟洗掉來檢查記錄是否被洗掉,但我怎么知道記錄是否已更新或創建?
uj5u.com熱心網友回復:
創建 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抽象,因為您永遠不需要直接創建它的實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411073.html
標籤:
