I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تبني نظام سجل النشاط (Activity Log) في لارافيل زي المحترفين

إزاي تبني نظام سجل النشاط (Activity Log) في لارافيل زي المحترفين أكيد مريت بالموقف ده قبل كدة: مديرك أو عميلك يجي يسألك "مين اللي مسح الريكورد ده؟" أو "إيه اللي

إزاي تبني نظام سجل النشاط (Activity Log) في لارافيل زي المحترفين
Reading Count: 9

إزاي تبني نظام سجل النشاط (Activity Log) في لارافيل زي المحترفين

أكيد مريت بالموقف ده قبل كدة: مديرك أو عميلك يجي يسألك "مين اللي مسح الريكورد ده؟" أو "إيه اللي اتغير في بيانات العميل الفلاني يوم التلات اللي فات؟". طبعاً بتبدأ رحلة البحث في قاعدة البيانات (Database) وبتحاول تستنتج من التوقيتات، وممكن متوصلش لحاجة. هنا بيجي دور الـ Activity Log أو الـ Auditing، اللي بيخليك تعرف كل "نفس" بيحصل جوه الداتابيز بتاعتك.

ليه محتاج نظام تتبع (Auditing) في مشروعك؟

غير إن العميل بيحس بالأمان، الـ Activity Log مهم جداً في الأنظمة المالية (Financial Systems) والأنظمة اللي فيها بيانات حساسة. تخيل لو حد عدل رصيد أو غير حالة طلب (Order Status) من غير ما نعرف مين المسؤول، دي كارثة أمنية. بناء نظام تتبع بيضمن ليك الـ Accountability أو "المسؤولية الكاملة" عن كل أكشن بيتم.

الخيار الأسهل والأذكى: باكيدج spatie/laravel-activitylog

ليه تعيد اختراع العجلة وتكتب كود من الصفر يستهلك وقتك ويطلع فيه ثغرات؟ مجتمع لارافيل (Laravel Community) وفر لنا مكتبة جبارة اسمها spatie/laravel-activitylog. دي المكتبة رقم 1 في المجال ده.

عشان نبدأ، هنثبت المكتبة عن طريق الكومبوزر (Composer):

composer require spatie/laravel-activitylog

إزاي تربط الموديل (Model) بنظام التتبع؟

بعد ما تثبت المكتبة، هتحتاج تضيف الـ Trait اللي اسمها LogsActivity جوه أي موديل عايز تراقبه. مثال على موديل (Product):

namespace App\Models; use Illuminate\Database\Eloquent\Model; use Spatie\Activitylog\Traits\LogsActivity; use Spatie\Activitylog\LogOptions; class Product extends Model { use LogsActivity; protected $fillable = ['name', 'price']; public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnly(['name', 'price']) ->logOnlyDirty(); // عشان يسجل التغييرات الجديدة بس } }

لاحظ هنا إني استخدمت logOnlyDirty()، دي ميزة عبقرية عشان متسجلش "داتا مكررة" (Redundant Data)، المكتبة هتسجل بس العمود اللي قيمته اتغيرت فعلاً.

تخصيص الرسائل (Customizing Log Messages)

ممكن تحب تخصص الرسالة اللي بتظهر في اللوج (Log Message) عشان تبقى مفهومة للإدارة. تقدر تعدل الـ Event اللي بيحصل:

public function tapActivity(Activity $activity, string $eventName) { $activity->description = "تم {$eventName} المنتج بواسطة " . auth()->user()->name; }

نصيحة من أخ لمبرمج زميل

بص يا سيدي، بناء الأنظمة دي مش مجرد كود، ده "عقلية" (Mindset). نصيحتي ليك إنك متبالغش في تسجيل كل حاجة. سجل البيانات الحساسة فقط، لأن تسجيل كل "كليك" هيزود حجم الداتابيز بتاعتك بشكل مرعب مع الوقت. دايماً فكر في الـ Performance قبل ما تقرر تسجل أي Log.

استمر في التعلم وطور مهاراتك في الـ Eloquent و الـ Events & Listeners، لأن ده اللي بيفرق المبرمج "الهاوي" عن المبرمج "الخبير". لو عندك أي سؤال بخصوص الـ Implementation، سيبلي كومنت وهرد عليك فوراً.


Share

Related posts

Jul 20, 2026 • 1 min read
Reading Count: 6
الدليل الشامل لاستخدام حقن الاعتماديات (Dependency Injection) في لارافيل (Laravel)

الدليل الشامل لاستخدام حقن الاعتماديات (Dependency Injection) في لارافيل (Laravel) أكيد مريت بالموقف...

Jul 19, 2026 • 1 min read
Reading Count: 16
أسرار استخدام Laravel Prompts لعمل أوامر Artisan تفاعلية ومميزة

أسرار استخدام Laravel Prompts لعمل أوامر Artisan تفاعلية ومميزة لو إنت شغال بـ Laravel ، أكيد قضيت س...

Jul 19, 2026 • 1 min read
Reading Count: 11
إعداد نظام تعدد المستأجرين (Multi-Tenancy) باستخدام حزمة Spatie و Laravel

إعداد نظام تعدد المستأجرين (Multi-Tenancy) باستخدام حزمة Spatie و Laravel أهلاً بك يا صديقي المبرمج....