Menu

Friday, November 22, 2019

[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Activity Log
[Laravel - Package] How to Install and Config Laravel Activity Log

laravel-activitylog เป็น package สำหรับใช้จัดเก็บ log การใช้งานของ user ยิ่งไปกว่านั้น package นี้สามารถเก็บ log จาก model event ได้โดยอัตโนมัติ

วิธีการติดตั้ง

  1. สั่งติดตั้ง laravel-activitylog package
  2. composer require spatie/laravel-activitylog
  3. สร้างไฟล์ migration ของ package ใน project
  4. php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
    
  5. รัน migrate เพื่อสร้างตารางในฐานข้อมูล
  6. php artisan migrate
    
  7. สร้างไฟล์ config ของ package ใน project
  8. php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"
    

วิธีการตั้งค่า Laravel model เพื่อเก็บ activity log

  1. สร้าง class BaseModel เพื่อเป็น base class สำหรับ Laravel model
  2. <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use Spatie\Activitylog\Traits\LogsActivity;
    
    class BaseModel extends Model
    {
        use LogsActivity;
        protected static $logAttributes = [];
        protected static $logFillable = true;
        protected static $logOnlyDirty = true;
    }
    
    โดยที่ 
    • $logAttributes เป็น array ของ attributes ที่จะถูก log เมื่อมีการเปลี่ยนแปลงสำหรับทุก events ไม่ว่าจะเป็น created, updated และ deleted
    • $logFillable เป็นการตั้งค่าให้เก็บ log ทุก attributes ใน $fillable
    • $logOnlyDirty เป็นการตั้งค่าให้เก็บข้อมูล properties ของ log เฉพาะส่วนที่มีการเปลี่ยนแปลง
  3. ใช้ BaseModel เป็น base class สำหรับ models ต่างๆ
หมายเหตุ สำหรับ attributes ที่สามารถตั้งค่าได้ ให้ดูตัวแปรที่ขึ้นต้นด้วย static:: ใน DetectsChanges

ตัวอย่างการใช้งาน

  • เก็บ activity log ของการ login
  • activity()
        ->causedBy($user)
        ->withProperties([
            'id'        => $user->id,
            'email'     => $user->email,
        ])
        ->log("Login");
    
  • เรียกดู activity log รายการสุดท้าย
  • $lastActivity = Activity::all()->last();
    

No comments:

Post a Comment