اذهب إلى المحتوى

السؤال

نشر

أثناء متابعتي لأحد الشروحات تم ذكر أنه يتم استخدام Dependency Injection و Route Model Binding  في الجزء التالي من الكود:

   public function show(Project $project)
    {
    
    }

كيف يتم التعرف على البروجكت بالرغم من قيامه بتمرير الـ id دون استخدام find() الأمر مربك بالنسبة لي، أرجو التوضيح مع الأمثلة ومتى يتم استخدام ذلك

Recommended Posts

  • 0
نشر

 لابد اولا من فهم ما يلي:

- Dependency Injection: هنا يتم حقن تابع الـ Project كائن داخل الوظيفة، بدلاً من اننا نقوم بإنشائه داخل الوظيفة.

- Route Model Binding: عندما نضع معلمة من نوع Model كـ Project في المسار، فإن Laravel يقوم تلقائياً بالبحث عن السجل المطابق للـ id وتمريره.

أي أن لارافيل يقوم بالبحث بنفسه وتمرير النموذج المطلوب دون أن نحتاج للقيام به والافتراضي لها هو الid .

مثال:

Route::get('/project/{project}', function (Project $project) {
   return $project->name;
});

هنا project سيحتوي مباشرة على البيانات بدون الحاجة لاستدعاء find.

في المقابل لو استخدمنا:

Route::get('/project/{id}', function ($id) {
   return Project::find($id)->name; 
});

فهنا سنقوم بالبحث يدويا.

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

ويمكننا عمل Route Model Binding عن طريق اي حقل يكون unique,
فهكذا يمكننا اخبار لارافل ان تفعل ال Route Model Binding لحقل ال slug

Route::get('/projects/{project:slug}', 'ProjectController@show');

 

public function show(Project $project)
{
    // يمكنك الوصول إلى حقول النموذج هنا باستخدام الـ slug
    $projectName = $project->name;
    $projectDescription = $project->description;
    // ...
}

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...