Site icon PlusMagi's Blog By Pitt Phunsanit

Laravel: Observer Trigger Event created, deleted, updated

เพราะว่ามีการ cache ข้อมูลบางส่วนไว้เป็น file ( อย่าง export เป็น json ไว้ ) เมื่อมีการแก้ไขข้อมูลผ่าน model ในกระบวนการ created, creating, deleted, deleting, forceDeleted, forceDeleting, restored, restoring, updated, updating จะต้องไป แก้ไขหรือสร้างไฟล์พวกนี้ด้วย ใน Laravel สามารถทำได้โดยใช้ Observer

  1. สร้าง Observer โดยใช้คำสั่ง
    php artisan make:observer { class name }
    เช่น
    php artisan make:observer CategoryObserver
  2. แก้ไฟล์ model ที่จะให้ ป้า Observer เช่น SourceCode/app/Observers/CategoryObserver.php
    <?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 ทำงาน
  3. แก้ไฟล์ model ที่จะให้ ป้า Observer เช่น SourceCode/app/Models/Category.php
    <?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 คือ

Exit mobile version