4.2 · لارافيل (Laravel) : المسارات وبليد (Blade) وإلوكوينت (Eloquent ORM) والهجرات (migrations)

المستوى 4 · أطر العمل وواجهات API (Frameworks & API)

4.2لارافيل (Laravel) : المسارات وبليد (Blade) وإلوكوينت (Eloquent ORM) والهجرات (migrations)

الهدف: البناء مع لارافيل (التوجيه (routing) والمتحكمات وعروض بليد (Blade) و ORM إلوكوينت (Eloquent ORM) والهجرات (migrations)) — تطبيقات مهيكلة ومنتجة وآمنة، قلب PHP الاحترافي الحالي.
الوقت المقدّر: 13 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • التوجيه + المتحكمات : يوجه Route::get('/produits', [ProduitController::class, 'index']) الرابط نحو الفعل ؛ و Artisan يولد الكود.
  • بليد + إلوكوينت : قوالب {{ }} بتهريب آلي (ضد XSS)، وقاعدة تُعالَج بكائنات (Produit::where(...)->get()) باستعلامات مُعامَلة آلية.
  • منعكس رياد : إصدار القاعدة بهجرات وفهم SQL المولد (الحذر من N+1) بدلا من الخضوع للـ ORM.

حالة مصغرة متواصلة — رياد ينقل فهرسه إلى لارافيل

فهرس MVC خاص برياد (4.1) يكبر : ينقله إلى لارافيل في قسنطينة. يصرح بمساراته نحو ProduitController، ويعرض بعرض بليد يهرب افتراضيا، ويقرأ القاعدة عبر إلوكوينت دون كتابة SQL، ويصف جدول المنتجات في هجرة مُصدَرة مع Git. عندما يستلم زميل المشروع، أمر يثبت وآخر يرحل — والقاعدة متطابقة. ثاني محطة في الخيط الرابط : منتج ومهيكل وآمن افتراضيا.

تتمة حالة 4.1 — يصنعن رياد MVC خاصته بإطار عمل.

1. التوجيه والمتحكمات و Artisan

يطبق لارافيل (Laravel) نمط MVC بأدوات أنيقة. يربط التوجيه (routing) الرابط بالأفعال : يرسل Route::get('/produits', [ProduitController::class, 'index']) طلبات GET نحو طريقة index — معبر (GET/POST والمعاملات والمجموعات والوسائط). وتعالج المتحكمات الطلبات (تستقبل وتنادي النماذج وترجع عرضا أو ردا). وسطر أوامر Artisan يولد المتحكمات والنماذج ويشغل الهجرات : يجهز رياد في ثوان بدلا من النسخ واللصق.

2. بليد : عروض آمنة

بليد (Blade) هو محرك القوالب : {{ $variable }} للعرض، و@foreach و@if لمنطق الإظهار، وتخطيطات قابلة لإعادة الاستعمال بالوراثة. وميزته الكبرى : التهريب الآلي — البيانات مُهرَّبة افتراضيا، ما يحمي من XSS دون تفكير. يستبدل رياد خلطه الخام PHP/HTML بقوالب مقروءة وآمنة.

3. إلوكوينت والهجرات : البيانات

إلوكوينت (Eloquent ORM) هو الـ ORM : تصبح الجداول أصنافا والأسطر كائنات — Produit::all() وProduit::find($id) وProduit::where('prix', '>', 100)->get() و$produit->save() — باستعلامات مُعامَلة آلية (ضد الحقن) وعلاقات أنيقة. وتُصدِر الهجرات (migrations) بنية القاعدة في كود PHP : قابلة لإعادة الإنتاج وقابلة للتتبع، وأساسية في الفريق وعند النشر. ويحتفظ رياد بحذرين : فهم SQL المولد وتفادي N+1 بالتحميل المسبق (with()). ويضيف لارافيل المصادقة والتحقق و CSRF الآلي والجلسات الآمنة : استثمار ممتاز، إطار العمل الأكثر طلبا.

خطأ شائع في الفهم: «مع إلوكوينت، لم أعد أحتاج معرفة SQL». لا. يكتب الـ ORM لغة SQL مكانكم — لكن الاستعمال السيئ يولد استعلامات كارثية (N+1 : استعلام لكل عنصر من قائمة بدل واحد) لا يكشفها إلا عين تفهم SQL. يجعل إلوكوينت منتجا من يعرف أسس SQL ؛ ويجعل خطيرا واثقا من يجهلها.
دارة لارافيل لصفحة مسار ← متحكم ← إلوكوينت ← بليد مسار رابط نحو فعلالمتحكممتحكم يستقبل ويناديالنموذجإلوكوينت كائناتواستعلامات مُعامَلة آليةبليد + هجرة عرض مُهرَّبوقاعدة مُصدَرة
مسار ← متحكم ← إلوكوينت ← بليد
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) يصرح رياد بمساراته نحو أفعال المتحكم. 2) ينادي المتحكم إلوكوينت، الذي يعالج القاعدة بكائنات باستعلامات مُعامَلة. 3) يعرض عرض بليد بتهريب آلي. 4) تعيش بنية القاعدة في هجرات مُصدَرة. الدرس : إنتاجية + أمن افتراضي، دون سحر غير مفهوم.

🔎 مثال ملموس — 🔎 مثال ملموس — فهرس منتجات بلارافيل

حركات رياد الأربع، بالواجهات الحقيقية :

Route::get('/produits', [ProduitController::class, 'index']);
$produits = Produit::where('prix', '>', 100)->get(); // all(), find($id)
return view('produits.index', ['produits' => $produits]);
بليد (Blade) : {{ $p->nom }} + @foreach ($produits as $p) ... @endforeach

القراءة : مسار وطلب كائن وعرض وقالب — كل في مكانه.

الدرس : يطبق إطار العمل (framework) نمط MVC والأمن افتراضيا.

مفردات القسم

لارافيل (Laravel)
إطار عمل PHP الأشهر (أنيق ومنتج ونظام واسع) ؛ ويطبق MVC بالممارسات الجيدة. مرجع PHP العصري.

مثال بسيط: ينقل رياد إليه فهرسه ليسرع دون التضحية بالبنية.

ما ليس كذلك: تكديس سكربتات دون توجيه ولا ORM.

رد فعل: التفكير مسارات ومتحكمات وبليد وإلوكوينت وهجرات.

التوجيه (routing) / المتحكمات / Artisan
التوجيه : الرابط ← الأفعال (Route::get). المتحكمات : تعالج الطلبات. Artisan : سطر أوامر يولد الكود ويشغل الهجرات.

مثال بسيط: مسار /produits خاص برياد يشير إلى ProduitController@index، المولد بـ Artisan.

ما ليس كذلك: ملف PHP لكل رابط مُرتَّق باليد.

رد فعل: رابط واحد = مسار مسمى نحو فعل واضح.

بليد (Blade) (قوالب)
محرك قوالب لارافيل : {{ }} و@foreach و@if وتخطيطات — مع تهريب آلي (ضد XSS افتراضيا).

مثال بسيط: يعرض رياد {{ $p->nom }} دون خوف حقن HTML.

ما ليس كذلك: أصداء PHP متشابكة مع HTML دون تهريب.

رد فعل: {{ }} افتراضيا ؛ و{!! !!} عن علم فقط.

إلوكوينت (Eloquent ORM) (ORM)
ORM لارافيل : جداول ↔ أصناف وأسطر ↔ كائنات ؛ وقاعدة تُعالَج بكائنات/طرق، واستعلامات مُعامَلة آلية، وعلاقات أنيقة.

مثال بسيط: يقرأ رياد Produit::where('prix', '>', 100)->get() بدلا من كتابة SELECT.

ما ليس كذلك: SQL مدمج بمتغيرات غير مُهرَّبة.

رد فعل: فحص SQL المولد ومطاردة N+1 بـ with().

الهجرات (migrations)
بنية القاعدة مُصدَرة في كود PHP (مع Git) : قابلة لإعادة الإنتاج وقابلة للتتبع — أساسية في الفريق وعند النشر.

مثال بسيط: جدول منتجات رياد يولد من هجرة، تُعاد في كل مكان على التطابق.

ما ليس كذلك: تعديلات ALTER TABLE يدويا في الإنتاج.

رد فعل: لا بنية معدلة أبدا خارج هجرة.

في التطبيق — عمليا — البناء مع لارافيل

  1. أنشئوا مشروع لارافيل (عبر Composer)، واستكشفوا المسارات والمتحكمات والنماذج وعروض بليد وسطر أوامر Artisan.
  2. عرفوا مسارات (Route::get/post) نحو متحكمات ؛ وأنشئوا عرض بليد مع {{ }} و@foreach (تهريب آلي).
  3. استعملوا إلوكوينت : نموذج + CRUD بكائنات (all/find/where/save) دون SQL، واستعلامات مُعامَلة آلية.
  4. أنشئوا هجرة لإصدار جدول ؛ وفعلوا المصادقة والتحقق وحماية CSRF المقدمة.
تبنون تطبيقات عصرية مع لارافيل (التوجيه وبليد وإلوكوينت والهجرات) — مهيكلة ومنتجة وآمنة.

نص جاهز للقول — الدفاع عن الانتقال إلى لارافيل (30 ثانية)

« هذا رياد : مع لارافيل، مساراتنا صريحة، وعروض بليد تهرب افتراضيا، وإلوكوينت يعامل استعلاماتنا، وهجراتنا تُصدِر القاعدة. نسلّم أسرع، مع أمن مدمج بدلا من ترقيعه. »

يُقال في نقطة تقنية ؛ واعرضوا مسارا + بليد + هجرة.

نموذج نسخ-لصق — CRUD لارافيل (كود مُختبَر)

', 100)->get();
        return view('produits.index', ['produits' => $produits]);
    }
    public function store(Request $request) {
        $valide = $request->validate(['nom' => 'required|string|max:255', 'prix' => 'required|numeric|min:0']);
        $produit = Produit::create($valide);
        return response()->json($produit, 201);
    }
}

// resources/views/produits/index.blade.php
// @foreach ($produits as $p) 
  • {{ $p->nom }} — {{ $p->prix }} DA
  • @endforeach // database/migrations/xxxx_create_produits_table.php (مقتطف) // Schema::create('produits', function (Blueprint $t) { // $t->id(); $t->string('nom'); $t->decimal('prix', 10, 2); $t->timestamps(); // });

    موقع واجهة صغير

    تكفي المسارات + بليد : احتفظوا بإلوكوينت لما يستحق قاعدة، دون إفراط نمذجة.

    تطبيق حقيقي

    مثل رياد : مسارات مسماة ومتحكمات موارد وإلوكوينت بتحميل مسبق، وكل شيء في هجرات.

    قائمة تبطئ (N+1)

    حملوا العلاقات دفعة واحدة (with('categorie')) : استعلام واحد بدل واحد لكل سطر.

    فريق يبدأ

    امنعوا SQL المدمج و HTML غير المُهرَّب : يفعلهما إطار العمل مسبقا.

    حذر: منتج لا يعني مكشوفا : تحققوا من كل مدخل (validate())، واتركوا بليد تهرب افتراضيا، وضعوا الأسرار في .env، وليست في الكود أبدا. محتوى تعليمي، وأمثلة ببيانات وهمية.

    ✓ ممارسات جيدة

    • احترام MVC الذي يفرضه إطار العمل.
    • فهم SQL الذي يولده إلوكوينت.
    • إصدار القاعدة بهجرات.

    ✗ أخطاء شائعة

    • وضع المنطق في قوالب بليد.
    • تجاهل N+1 (ORM صندوق أسود).
    • إعادة برمجة مصادقة/تحقق/CSRF مقدمة مسبقا.

    النقاط الأساسية

    • لارافيل = إطار عمل PHP الأشهر : MVC وإنتاجية وأمن مدمج. المرجع.
    • التوجيه (Route::get ← الأفعال) والمتحكمات و Artisan (التوليد والترحيل).
    • بليد : {{ }} و@foreach وتهريب آلي (ضد XSS). إلوكوينت : كائنات بدل SQL ومعامَلة آلية وعلاقات.
    • الهجرات : قاعدة مُصدَرة = قابلة لإعادة الإنتاج وقابلة للتتبع. مع مصادقة وتحقق و CSRF آلي.

    تحدي 48 ساعة — طبّق غدا

    سلّموا مورد CRUD واحدا بلارافيل : مساران + عرض بليد واحد + إلوكوينت + هجرة واحدة، دون سطر SQL واحد باليد.

    قائمة الخروج من القسم
    • أستطيع ذكر المسارات وبليد وإلوكوينت والهجرات.
    • أعرف شرح التهريب الآلي والمعامَلة الآلية.
    • عندي CRUD لارافيل واحد يشتغل.
    تقييم ذاتي 1-5 : هل تهرب عروضي افتراضيا ؟هل قاعدتي كلها في هجرات ؟

    أسئلة شائعة

    ماذا يجلب إطار عمل مثل لارافيل مقابل PHP «باليد» ؟

    بنية MVC مفروضة (انتهى السباغيتي)، وإنتاجية (ORM وقوالب وتوجيه و Artisan وعشرات المزايا الجاهزة)، وأمن مدمج افتراضيا (تهريب بليد ضد XSS، ومعامَلة إلوكوينت ضد الحقن، و CSRF آلي، وتجزئة، ومصادقة متينة) ومزايا مجربة (مصادقة وتحقق وجلسات ورسائل وملفات واختبارات وهجرات). نبني تطبيقات كاملة أسرع بكثير، وبأخطاء أقل — ومن هنا مكانته الاحترافية التي لا غنى عنها.

    ما هو ORM مثل إلوكوينت — وهل تبقى معرفة SQL لازمة ؟

    يربط الـ ORM الكائنات ↔ الجداول (جداول ↔ أصناف وأسطر ↔ كائنات وأعمدة ↔ خصائص) : Produit::all() بدل SELECT *. المساهمات : إنتاجية وأمن (معامَلة آلية) ومقروئية وعلاقات أنيقة ($utilisateur->commandes). لكن نعم، تبقى SQL ضرورية : لفهم ما يولده الـ ORM وتحسينه (N+1 والفهارس والربط) وللاستعلامات المعقدة. إلوكوينت + أسس SQL = الثنائي الجيد.

    تحقّق من فهمك

    ماذا تجلب إلوكوينت مقابل SQL مكتوب باليد ؟

    موارد إضافية (اختياري، للتعمّق أكثر)

    اختبار المستوى 4أسئلة جديدة وأصعب للتحقق من مكتسباتك