تجاوز $fillable بأمان باستخدام forceFill() في Laravel

يوليو 2, 2025

تجاوز $fillable بأمان باستخدام forceFill() في Laravel

جربت تستخدم create() في Laravel ولاقيت إن حقول زي role أو status مش بتتحفظ؟ ده بسبب حماية Laravel ضد mass assignment اللي بتتجاهل أي حقول مش موجودة في الـ whitelist.

🔐 إيه هو Mass Assignment؟

ده وسيلة لتملىء أكتر من خاصية في الموديل مرة واحدة، زي:

User::create([
  'name' => 'أحمد',
  'email' => '[email protected]',
  'role' => 'admin', // مش هيتسجل لو مش موجود في fillable
]);

🛡️ إزاي تتحكم في الحقول اللي تتكتب أو لا؟

1. $fillable (الـ whitelist)

protected $fillable = ['name', 'email'];

بس الحقول اللي بتحطها هنا مسموح تكتبها بكده.

2. $guarded (الـ blacklist)

protected $guarded = ['role'];

كل الحقول مسموح بيها إلا اللي مكتوبة هنا.

⚡ تعال نشوف forceFill()

لما تكون واثق إن الداتا آمنة (زي سِيدرز، جوبز، أو عمليات خلفية)، تقدر تستخدم:

$user = new User;

$user->forceFill([
  'name' => 'أحمد',
  'email' => '[email protected]',
  'role' => 'admin', // هيتسجل حتى لو مش في fillable
])->save();

محتاجش تعدل في $fillable أو $guarded، وسهل وآمن لما تستخدمه صح.

✔️ إمتى تستخدم كل طريقة؟

  • $fillable: للتعامل مع بيانات من المستخدم زي الفورم أو API.
  • $guarded: لو عندك موديل فيه حقول كتير ومش عايز تحطهم كلهم في fillable.
  • forceFill(): للـ backend logic وداتا موثوقة منك أنت بنفسك.

لو استخدمت create() من غير ما تبقى فاهم آلية الحماية دي، هتشوف مشاكل في missing fields. Laravel قوي بس لو فاهم أدواته.

المدونة

تعزيز PHP Enums باستخدام archtechx/enums

يوليو 01, 2025

تعزيز PHP enums باستخدام حزمة archtechx/enums من PHP 8.1، ظهر نوع جديد اسمه “enums” بيخليك تعرف قيم ثابتة بأسماء مرمّزة زي statuses...

تحديث Laravel 12.18.0

يونيو 17, 2025

تحديث Laravel 12.18.0 صدر نسخه Laravel 12.18.0 فيها شوية ميزات جامدة كده: توابع لتشفير وفك تشفير النصوص باستخدام Stringable ديركت في chain strings...

مقارنة CSS: طبقات vs BEM vs Utility Classes

يونيو 26, 2025

مقارنة CSS: Cascade Layers و BEM و Utility Classes المقالة بتتكلّم عن ٣ طرق لإدارة الـ specificity في CSS – BEM والـ utility‑first classes وك...

تذكير بالمهام مع Laravel وMongoDB

يونيو 30, 2025

📌 بناء تطبيق تذكير مهام المقال ده بيشرح إزاي نعمل تطبيق Laravel يستخدم MongoDB علشان يذكرك بالمهمات بتاعتك، مع تسجيل دخول، CRUD، وتذكير بالإيميلات...

أحدث مميزات ECMAScript 2025

يونيو 30, 2025

أحدث مميزات ECMAScript 2025 في 25 يونيو 2025، تم اعتماد ES2025 رسميًا. الإضافات الجاية هتسهل عليك كتابة الكود: 1. 📦 Import Attributes و JSON Module...

توليد تقارير بكفاءة مع كاش وزمن ثابت واستخدام الـ Job Queues

يوليو 07, 2025

إزاي نعمل كاش لتقارير بفترة زمنية ثابتة إزاي نولّد تقارير ضخمة في الخلفية باستخدام الـ Job Queues 1. 🧠 كاش للتقارير بفترة زمنية ثابتة لو ع...

The Ultimate Managed Hosting Platform