Laravel Observer 觀察者
Laravel Observer 觀察者
laravel提供模型觀察者的功能,讓我們可以監聽模型上的事件,當觸發特定事件時,可以做而外的處理
舉例說明:
假如在新增商家後,要透過google api
取得商家資訊,就可以透過Observer
方式處理
透過以下指令創建Observer
,預設會放在app/Observers/
資料夾底下
php artisan make:observer StoreObserver --model=Store
創建完成後檔案如下
<?php
namespace App\Observers;
use App\Models\Store;
class StoreObserver
{
/**
* Handle the Store "created" event.
*
* @param \App\Models\Store $store
* @return void
*/
public function created(Store $store)
{
//
}
/**
* Handle the Store "updated" event.
*
* @param \App\Models\Store $store
* @return void
*/
public function updated(Store $store)
{
//
}
/**
* Handle the Store "deleted" event.
*
* @param \App\Models\Store $store
* @return void
*/
public function deleted(Store $store)
{
//
}
/**
* Handle the Store "forceDeleted" event.
*
* @param \App\Models\Store $store
* @return void
*/
public function forceDeleted(Store $store)
{
//
}
}
觀察者編輯
我們要在商家創建時進行處理,所以在created
函式裡進行處理
public function created(Store $store)
{
$store = Store::findOrFail($store->id);
// ... 抓取api資料以及賦予值
$store->save();
}
註冊觀察者
再到App\Providers\EventServiceProvider
註冊Model Observers
可以在boot
方法中註冊
use App\Models\Store;
use App\Observers\StoreObserver;
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
Store::observe(StoreObserver::class);
}
也可以在$observers
屬性中列出
use App\Models\Store;
use App\Observers\StoreObserver;
/**
* The model observers for your application.
*
* @var array
*/
protected $observers = [
Store::class => [StoreObserver::class],
];
Observers
各方法對應事件
方法 | 對應事件 |
---|---|
retrieved | 檢索模型後 |
creating | 在創建模型之前 |
created | 創建模型後 |
updating | 在模型更新之前 |
updated | 模型更新後 |
saving | 在保存模型之前 |
saved | 模型保存後 |
deleting | 在刪除模型之前 |
deleted | 刪除模型後 |
restoring | 在恢復軟刪除模型之前 |
restored | 軟刪除模型恢復後 |
Observers
觀察者 與event
事件 差別
Observers
基本上是只能在 Eloquent
模型處理預定義事件(創建記錄、更新記錄、刪除等)。
event
事件是通用的,不是預定義的,可以在任何地方使用,不僅是在模型中。
本作品采用《CC 协议》,转载必须注明作者和本文链接