انتقل إلى محتوى الدرس
الدرس 42
دورة إطار العمل Laravel

ربط النماذج بالمسارات وترقيم الصفحات في EloquentImplicit Route Model Binding and Eloquent Pagination

حقن نماذج Eloquent تلقائياً في المسارات بالمعرف أو السلج وتقسيم النتائج الكبيرة إلى صفحات عبر paginate وروابط links.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يقوم ربط النماذج الضمني بالمسارات بحقن نسخة نموذج Eloquent جاهزة داخل دالة المسار أو المتحكم تلقائياً بمجرد تطابق اسم المتغير المحدد النوع مع اسم معامل المسار في الرابط. بدلاً من تكرار استدعاء findOrFail يدوياً في كل إجراء، يستعلم Laravel عن السجل بالمعرف الأساسي خلف الكواليس ويعيد استجابة 404 تلقائياً إذا لم يجده.

  • تطابق الاسم والنوع (Name & Type Match): يجب أن يطابق اسم المعامل {post} في المسار اسم المتغير Post $post في المتحكم.
  • استجابة 404 التلقائية (Auto 404): يطلق استثناء عدم العثور على النموذج ويعرض صفحة 404 تلقائياً عند غياب المعرف.
  • التوافق مع الموارد (Resource Ready): يعمل بتناغم تام مع معاملات المسارات القياسية المولدة عبر Route::resource.
مخطط معماري يوضح ربط النماذج بالمسارات وترقيم الصفحات في Eloquent في إطار العمل Laravel 12
PHP
use App\Models\Post;
use Illuminate\Support\Facades\Route;

Route::get('/posts/{post}', function (Post $post) {
    return view('posts.show', ['post' => $post]);
});

لبناء روابط صديقة لمحركات البحث، يمكنك جلب نموذج المسار عبر عمود آخر غير المعرف الرقمي مثل slug أو uuid مباشرة في تعريف المسار بالصيغة {post:slug}. وإذا أردت اعتماد هذا العمود افتراضياً في كافة مسارات النموذج وتوليد روابطه، فأعد تعريف دالة getRouteKeyName داخل كلاس النموذج.

  • التخصيص المباشر بالمسار ({post:slug}): حدد اسم العمود بعد النقطتين في الرابط للبحث عبره في ذلك المسار تحديداً.
  • التخصيص العام بالنموذج (getRouteKeyName): أعد اسم العمود من دالة getRouteKeyName داخل النموذج لاعتماده في كل المسارات.
  • توليد الروابط التلقائي (route Helper): تمرير كائن النموذج لدالة route يستخرج قيمة عمود السلج المخصص تلقائياً.
PHP
Route::get('/articles/{post:slug}', [PostController::class, 's

// Or inside App\Models\Post:
public function getRouteKeyName(): string
{
    return 'slug';
}

في المسارات المتداخلة مثل /users/{user}/posts/{post}، يقيد Laravel النموذج الثاني تلقائياً عند استخدام عمود مخصص، أو عبر إلحاق دالة scopeBindings بالمسار لضمان ملكية المستخدم الأب لذلك المقال تحديداً. كما يمكنك تخصيص سلوك التطبيق عند غياب السجل عبر دالة missing لتحويل الزائر بدلاً من صفحة 404.

  • حماية التبعية (scopeBindings): تتحقق برمجياً من أن السجل الابن في الرابط يتبع فعلياً للسجل الأب المذكور قبله.
  • شمل المحذوفات ناعماً (Route withTrashed): ألحق withTrashed بالمسار للسماح بجلب السجلات المؤرشفة في مسارات لوحة الإدارة.
  • معالجة السجل المفقود (missing Fallback): توجه الزائر إلى صفحة بديلة بلطف عند طلب سجل لم يعد موجوداً.
PHP
Route::get('/users/{user}/posts/{post}', function (User $user,
    return view('posts.show', compact('user', 'post'));
})->scopeBindings()
  ->missing(fn () => to_route('posts.index'));

بدلاً من جلب آلاف السجلات دفعة واحدة، يوفر Eloquent ثلاث دوال مدمجة لترقيم الصفحات هي paginate و simplePaginate و cursorPaginate. بينما تنفذ paginate استعلام عد إضافياً لتوليد أرقام الصفحات، تكتفي simplePaginate بزرّي التالي والسابق، وتستخدم cursorPaginate مؤشر الترتيب لتحقيق سرعة فائقة في الجداول الضخمة.

  • الترقيم الكامل (paginate): يعيد كائن LengthAwarePaginator يتضمن إجمالي السجلات وأرقام الصفحات الكاملة.
  • الترقيم البسيط (simplePaginate): يتجنب استعلام العد الثقيل ويعرض أزرار التالي والسابق فقط لتسريع الأداء.
  • ترقيم المؤشر (cursorPaginate): يستغني عن إزاحة OFFSET البطيئة ويعتمد على مقارنة قيمة العمود المرتب.
PHP
$posts = Post::with('user:id,name')
    ->latest()
    ->paginate(12);

$feed = Post::orderBy('id')->cursorPaginate(20);

يقضي الجمع بين ربط النماذج الضمني في مسارات السجل المفرد وترقيم الصفحات في مسارات القوائم على الكود المكرر في المتحكمات ويحمي ذاكرة الخادم. احرص دائماً على دمج الترقيم مع التحميل المسبق ودالة withQueryString لتقديم صفحات قوائم سريعة ومتوافقة مع الفلاتر.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحسنمعيار Laravel 12 الحديث
جلب سجل المساركتابة استعلام البحث ودالة firstOrFail يدوياً في كل إجراءاستخدام الربط الضمني بالمسار مع تحديد العمود {post:slug}
ملكية المسار المتداخلفحص تطابق معرف الأب مع الابن يدوياً وإطلاق 404إلحاق دالة scopeBindings بتعريف المسار المتداخل
عرض الجداول الكبيرةاستدعاء all لجلب آلاف الصفوف واستنزاف ذاكرة الخادماستخدام دالة paginate أو cursorPaginate لتقسيم النتائج
حفظ فلاتر البحثضياع معاملات التصفية والبحث عند النقر على الصفحة الثانيةإلحاق دالة withQueryString بكائن الترقيم قبل تمريره للعرض
PHP
Route::get('/posts/{post:slug}', function (Post $post) {
    $comments = $post->comments()
        ->with('author:id,name')
        ->paginate(15);
    return view('posts.show', compact('post', 'comments'));
});
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «ربط النماذج بالمسارات وترقيم الصفحات في Eloquent» مفاهيم ربط النماذج الضمني بالمسارات، وربط النموذج عبر عمود السلج، والربط المقيد ومعالجة السجل المفقود وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «تجزئة كلمات المرور والتشفير وحراس المصادقة في Laravel» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Model Binding ربط والترقيم
حقن نماذج Eloquent تلقائياً في المسارات بالمعرف أو السلج وتقسيم النتائج الكبيرة إلى صفحات عبر paginate وروابط links.
للمراجعة
02 Implicit Route Model Binding ربط النماذج الضمني بالمسارات
المفهوم الهندسي والتطبيق العملي المباشر لقسم ربط النماذج الضمني بالمسارات في إطار العمل Laravel 12.
للمراجعة
03 Binding Models by Custom Slug ربط النموذج عبر عمود السلج
المفهوم الهندسي والتطبيق العملي المباشر لقسم ربط النموذج عبر عمود السلج في إطار العمل Laravel 12.
للمراجعة
04 Scoped Bindings and Missing Models الربط المقيد ومعالجة السجل المفقود
المفهوم الهندسي والتطبيق العملي المباشر لقسم الربط المقيد ومعالجة السجل المفقود في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «ربط النماذج الضمني بالمسارات» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «ربط النموذج عبر عمود السلج» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من ربط النماذج الضمني بالمسارات في إطار العمل Laravel 12؟

يسهم ربط النماذج الضمني بالمسارات في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «ربط النموذج عبر عمود السلج» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة الربط المقيد ومعالجة السجل المفقود بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة الربط المقيد ومعالجة السجل المفقود.

04

لماذا يُعد تطبيق تقسيم نتائج الاستعلام إلى صفحات مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق عرض روابط الترقيم في Blade في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص ربط النماذج وترقيم الصفحات؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.