في هذا الدرس 6تصفّح المواضيع
يقوم ربط النماذج الضمني بالمسارات بحقن نسخة نموذج Eloquent جاهزة داخل دالة المسار أو المتحكم تلقائياً بمجرد تطابق اسم المتغير المحدد النوع مع اسم معامل المسار في الرابط. بدلاً من تكرار استدعاء findOrFail يدوياً في كل إجراء، يستعلم Laravel عن السجل بالمعرف الأساسي خلف الكواليس ويعيد استجابة 404 تلقائياً إذا لم يجده.
- تطابق الاسم والنوع (Name & Type Match): يجب أن يطابق اسم المعامل {post} في المسار اسم المتغير Post $post في المتحكم.
- استجابة 404 التلقائية (Auto 404): يطلق استثناء عدم العثور على النموذج ويعرض صفحة 404 تلقائياً عند غياب المعرف.
- التوافق مع الموارد (Resource Ready): يعمل بتناغم تام مع معاملات المسارات القياسية المولدة عبر Route::resource.
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 يستخرج قيمة عمود السلج المخصص تلقائياً.
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): توجه الزائر إلى صفحة بديلة بلطف عند طلب سجل لم يعد موجوداً.
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 البطيئة ويعتمد على مقارنة قيمة العمود المرتب.
$posts = Post::with('user:id,name')
->latest()
->paginate(12);
$feed = Post::orderBy('id')->cursorPaginate(20);
تقبل كائنات الترقيم الدوران عليها داخل حلقات Blade تماماً مثل المجموعات العادية، ويتكفل استدعاء دالة links بطباعة أزرار التنقل بين الصفحات تلقائياً. وعندما تتضمن الصفحة فلاتر بحث في الرابط، يضمن إلحاق دالة withQueryString الاحتفاظ بجميع معاملات البحث عند الانتقال للصفحات التالية.
- طباعة أزرار التنقل (links Method): تولد شريط أزرار الصفحات المتجاوب والمدعوم بسمات الوصول القياسية تلقائياً.
- الاحتفاظ بمعاملات البحث (withQueryString): تلحق كافة معاملات التصفية والبحث الحالية بروابط الصفحات المولدة.
- تفعيل تنسيق بوتستراب (useBootstrapFive): استدعِ دالة تفعيل Bootstrap 5 داخل AppServiceProvider لتغيير تصميم الأزرار.
$posts = Post::where('status', request('status', 'published'))
->paginate(10)
->withQueryString();
// In Blade view:
{{ $posts->links() }}
يقضي الجمع بين ربط النماذج الضمني في مسارات السجل المفرد وترقيم الصفحات في مسارات القوائم على الكود المكرر في المتحكمات ويحمي ذاكرة الخادم. احرص دائماً على دمج الترقيم مع التحميل المسبق ودالة withQueryString لتقديم صفحات قوائم سريعة ومتوافقة مع الفلاتر.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو غير المحسن | معيار Laravel 12 الحديث |
|---|---|---|
| جلب سجل المسار | كتابة استعلام البحث ودالة firstOrFail يدوياً في كل إجراء | استخدام الربط الضمني بالمسار مع تحديد العمود {post:slug} |
| ملكية المسار المتداخل | فحص تطابق معرف الأب مع الابن يدوياً وإطلاق 404 | إلحاق دالة scopeBindings بتعريف المسار المتداخل |
| عرض الجداول الكبيرة | استدعاء all لجلب آلاف الصفوف واستنزاف ذاكرة الخادم | استخدام دالة paginate أو cursorPaginate لتقسيم النتائج |
| حفظ فلاتر البحث | ضياع معاملات التصفية والبحث عند النقر على الصفحة الثانية | إلحاق دالة withQueryString بكائن الترقيم قبل تمريره للعرض |
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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «ربط النماذج الضمني بالمسارات» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «ربط النموذج عبر عمود السلج» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من ربط النماذج الضمني بالمسارات في إطار العمل Laravel 12؟
يسهم ربط النماذج الضمني بالمسارات في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «ربط النموذج عبر عمود السلج» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة الربط المقيد ومعالجة السجل المفقود بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة الربط المقيد ومعالجة السجل المفقود.
لماذا يُعد تطبيق تقسيم نتائج الاستعلام إلى صفحات مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق عرض روابط الترقيم في Blade في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص ربط النماذج وترقيم الصفحات؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.