เพราะว่ามีการ cache ข้อมูลบางส่วนไว้เป็น file ( อย่าง export เป็น json ไว้ ) เมื่อมีการแก้ไขข้อมูลผ่าน model ในกระบวนการ created, creating, deleted, deleting, forceDeleted, forceDeleting, restored, restoring, updated, updating จะต้องไป แก้ไขหรือสร้างไฟล์พวกนี้ด้วย ใน Laravel สามารถทำได้โดยใช้ Observer
- สร้าง Observer โดยใช้คำสั่ง
php artisan make:observer { class name }
เช่นphp artisan make:observer CategoryObserver
- แก้ไฟล์ model ที่จะให้ ป้า Observer เช่น SourceCode/app/Observers/CategoryObserver.phpอธิบาย123456789101112131415161718192021222324252627282930313233343536
<?php
namespace
App\Observers;
use
App\Http\Controllers\AssetCacheController;
use
App\Models\Category;
class
CategoryObserver
{
private
function
createdUpdateAssetCache(Category
$item
)
{
$controller
=
new
AssetCacheController();
$controller
->cacheSelectOptions(
'category_id'
,
'Category'
);
}
private
function
created(Category
$item
)
{
$this
->createdUpdateAssetCache(
$item
);
}
public
function
deleted(Category
$item
)
{
$this
->createdUpdateAssetCache(
$item
);
}
public
function
forceDeleted(Category
$item
)
{
$this
->createdUpdateAssetCache(
$item
);
}
public
function
updated(Category
$item
)
{
$this
->createdUpdateAssetCache(
$item
);
}
}
บรรทัดที่ 5 อ้างถึง class ที่จะทำงานให้
บรรทัดที่ 6 model ที่ให้ Observers ( ป้าข้างบ้าน ) เฝ้ามอง
บรรทัดที่ 10 เป็น function ที่สั่งให้ทำงาน เพราะว่า event อื่น ๆ ทำงานเหมือน ๆ กัน เลยรวมไว้ที่เดียวกัน จะได้เขียนง่าย ๆ แก้ ง่าย ๆ
บรรทัดที่ 17 คือ ส่วนที่จับ event ที่ต้องการให้ บรรทัดที่ 10 ทำงาน - แก้ไฟล์ model ที่จะให้ ป้า Observer เช่น SourceCode/app/Models/Category.phpอธิบาย1234567891011
<?php
namespace
App\Models;
use
App\Observers\CategoryObserver;
use
Illuminate\Database\Eloquent\Attributes\ObservedBy;
use
Illuminate\Database\Eloquent\Model;
#[ObservedBy([CategoryObserver::
class
])]
class
Category
extends
Model
{
บรรทัดที่ 5 อ้างถึง class ของป้า Observer ที่จะเฝ้าดู
บรรทัดที่ 6 class Observers อย่าลืมเหล่าแม่บ้าน
บรรทัดที่ 9 บอกไปเลยว่า ป้ามองอย่างใกล้ชิด
ในตอนนี้ ตัว model Observer จะมี event คือ
- created: ที่ต้องการรันหลังสร้างข้อมูล
- creating: ที่ต้องการรันก่อนสร้างข้อมูล
- deleted: ที่ต้องการรันหลังลบข้อมูล
- deleting: ที่ต้องการรันก่อนลบข้อมูล
- forceDeleted: ที่ต้องการรันหลังลบข้อมูลอย่างถาวร
- forceDeleting: ที่ต้องการรันก่อนลบข้อมูลอย่างถาวร
- restored: ที่ต้องการรันหลังกู้คืนข้อมูล
- restoring: ที่ต้องการรันก่อนกู้คืนข้อมูล
- updated: ที่ต้องการรันหลังอัพเดตข้อมูล
- updating: ที่ต้องการรันก่อนอัพเดตข้อมูล