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

ازاي تحمي كودك في لارافيل وتصطاد الأخطاء بدري باستخدام الـ Strict Mode في لارافيل إيلوquent (Laravel Eloquent Strict Mode)

معرفات الأقسام المختارة: ازاي تحمي كودك في لارافيل وتصطاد الأخطاء بدري باستخدام الـ Strict Mode في لارافيل إيلوquent (Laravel Eloquent Strict Mode) أهلاً بيك يا

ازاي تحمي كودك في لارافيل وتصطاد الأخطاء بدري باستخدام الـ Strict Mode في لارافيل إيلوquent (Laravel Eloquent Strict Mode)
Reading Count: 3

معرفات الأقسام المختارة:

ازاي تحمي كودك في لارافيل وتصطاد الأخطاء بدري باستخدام الـ Strict Mode في لارافيل إيلوquent (Laravel Eloquent Strict Mode)

أهلاً بيك يا بشمهندس في مقال جديد من سلسلة شروحات تطوير الويب (Web Development) وتحديداً عائلة لارافيل (Laravel). خلينا نتفق في البداية، كلنا مرينا باللحظة دي: بتكتب كود والدنيا تمام، بتعمل رن (Run) للموقع وشغال زي الفل في بيئة التطوير المحلية (Local Environment)، تطلع الإنتاج (Production)، وفجأة السيرفر يقع أو الأداء يبطئ بطئ غير طبيعي! والسبب؟ مشكلة (N+1 Query Problem) مختفية ومطلعش بيها أي إخطار ولا أي خطأ (Silent Error) يخليك تاخد بالك.

في المقال ده، هنتكلم عن ميزة سحرية نزلت في الإصدارات الحديثة من لارافيل، وهي وضع التشغيل الصارم أو الـ Strict Mode باستخدام طريقة Model::shouldBeStrict(). الميزة دي هتوفر عليك ساعات من التمحيص في قاعدة البيانات وهتخليك مبرمج محترف بيصطاد أخطاءه قبل ما توصل للعميل.

إيه هو الـ Strict Mode في إيلوquent (Eloquent Strict Mode) وليه محتاجه؟

زمان، وإنت شغال بـ إيلوquent (Eloquent)، كان عادي جداً تنسى تعمل (Eager Loading) لعلاقة معينة، فـ لارافيل كان بيعمل استعلامات (Queries) كتيرة جداً في الخلفية من غير ما يقولك، والموقع كان بيشتغل عادي بس الأداء بيتدمر. أو مثلاً، كنت ممكن تحاول تعمل (Mass Assignment) لعمود مش موجود في الـ $fillable، ولالارافيل كان بيتجاهله بصمت تام من غير ما ينبهك إن فيه حاجة غلط.

الوضع الصارم (Strict Mode) جه عشان يقفل الباب ده كله! هو عبارة عن تفعيل لثلاث حاجات رئيسية بتمنع الأخطاء الصامتة:

  • منع التحميل الكسول الوهمي (Prevent Lazy Loading).
  • منع تعبئة الحقول الوهمية أو الغير مسموح بها (Prevent Silently Discarding Attributes).
  • منع الوصول لخصائص مش موجودة أساساً في الموديل (Prevent Accessing Missing Attributes).

ازاي تفعل الـ Strict Mode في مشروع لارافيل (Laravel) بطريقة احترافية؟

أحسن مكان تفعل فيه الـ Strict Mode عشان يشتغل في بيئة التطوير بس (Development Environment) هو ملف AppServiceProvider.php. إنت مش عايز تفعل الوضع ده في الإنتاج (Production) عشان ما تقفلش الموقع لو حصل استثناء غير متوقع، إنت عايزه يصطاد المشاكل وأنت لسه بتكتب الكود.

عشان تعمل كده، هتروح لملف app/Providers/AppServiceProvider.php وتكتب الكود جوه دالة الـ boot بالشكل ده:


use Illuminate\Database\Eloquent\Model;

public function boot(): void
{
    // تفعيل الـ Strict Mode بناءً على بيئة العمل
    Model::shouldBeStrict(! $this->app->isProduction());
}

بالشكل ده، طول ما إنت شغال لوكال (Local)، أي غلطة من الأخطاء الثلاثة اللي قولنا عليها هتطلع لك استثناء (Exception) واضح وصريح تقولك "خد بالك، إنت بتعمل كذا وكذا وغلط!".

تفاصيل تفعيل الـ Strict Mode خطوة بخطوة وإيه اللي بيحصل ورا الكواليس؟

تعال نغوص أكتر ونشوف تفعيل الخاصية دي بيمنع إيه بالتحديد:

1. منع الـ Lazy Loading (Prevent Lazy Loading)

دي المشكلة الأكبر اللي بتواجه المبرمجين. لو عندك مثلاً (Posts) وكل بوست ليه (User)، وجيت تعرضهم بالطريقة دي من غير ما تعملهم (With):


$posts = Post::all();

foreach ($posts as $post) {
    echo $post->user->name; // هنا هيحصل N+1 Query
}

لو الـ Strict Mode مفعل، لارافيل مش هيسكت ولا هيعمل استعلامات ورا بعضها، بل هيرمي استثناء من نوع LazyLoadingViolationException ويقولك صراحة: ممنوع تعمل Lazy Loading للعلاقة دي، استخدم Eager Loading!

2. منع الحقول الغير قابلة للتعبئة (Prevent Silently Discarding Attributes)

لو حاجة زي الـ create أو الـ update استقبلت بيانات فيها حقول مش موجودة في مصفوفة الـ $fillable أو الـ $guarded، بدل ما لارافيل يتجاهلها وينقذ الموقف بصمت، الـ Strict Mode هيعتبرها خطأ ويوقف التنفيذ عشان يخليك تراجع كودك وتتأكد إن كل البيانات بتتخزن صح.

3. منع الوصول لخصائص غير موجودة (Prevent Accessing Missing Attributes)

لو حاجة في الكود حاولت تقرأ عمود مش جاي اساساً في الـ Select (مثلاً عملت select(['id', 'title']) وبعدين حاولت تطبع $post->body)، لارافيل هيديك خطأ تنبيهي إن الخاصية دي مش محملة أو مش موجودة في النتائج الحالية.

دروس تعلمتها في رحلتي البرمجية (Career Journey)

في بداياتي مع تطوير الويب (Web Development)، كنت بكتشف مشاكل الأداء بعد ما المشروع يرفع على سيرفر الحقيقي (Production) ودي كانت بتكون كوابيس. استخدام أدوات زي shouldBeStrict() بيخليك مبرمج استباقي (Proactive) مش تفاعلي (Reactive). المشاكل اللي بتظهر لك وإنت بتكتب الكود بتعلمك تكتب كود نظيف ومتين من أول مرة.

خاتمة ونصيحة من أخ

يا صاحبي، البرمجة مش بس إن الكود يشتغل، البرمجة إن الكود يشتغل بكفاءة، ويكون قابل للصيانة، وخالي من الأخطاء الخفية اللي بتأكل أداء السيرفرات. تفعيل الـ Strict Mode في لارافيل هو خطوة صغيرة جداً في إعداداتك، بس هتفرق معاك مية ومانية في جودة الكود اللي بتكتبه. جرب تفعلها النهاردة في مشروعك الجديد، وغامر واصلح الأخطاء اللي هتطلعلك، وهتشوف بنفسك إزاي مستواك التقني هيتطور بشكل ملحوظ.

بالتوفيق دايماً، ومستنيك في مقالات تقنية أكتر قريباً!


Share

Related posts

Aug 16, 2026 • 1 min read
Reading Count: 3
تطبيق الـ Soft Deletes بشكل متقدم في Laravel

يا هلا بيك يا باشمهندس في مقال جديد من سلسلة الاحتراف في تطوير الـ Web Development. خلينا نتفق في ال...

Aug 14, 2026 • 1 min read
Reading Count: 10
دليلك الشامل لاستخدام المعرفات الفريدة (UUIDs) كـ Primary Keys في لارافل إيلوكنت (Laravel Eloquent)

دليلك الشامل لاستخدام المعرفات الفريدة (UUIDs) كـ Primary Keys في لارافل إيلوكنت (Laravel Eloquent)...

Aug 14, 2026 • 1 min read
Reading Count: 10
إزاي تعمل Task Scheduling باحترافية في Laravel

يا هلا بيك يا باشمهندس في عالم البرمجة! لو انت شغال على مشروع ويب بلغة PHP وإطار العمل العظيم لاراكي...