الإنتقال للتصميم الجديد

تجنب تكرار الاستعلام في اكثر من دالة

من مجتمع دورة برمجة الويب باستخدام لارافيل Laravel

بدلاً من تكرار متغير في كل دالة وتجنب كثرة الاستعلام  كالتالي : 

 

public function index()
{
    $categories = Categories::all();

    return view('admin.products.index', compact('categories'));
}

public function create()
{
    $categories = Categories::all();

    return view('admin.products.create', compact('categories'));
}

 

هناك طرق عديده لتجنب التكرار منها تعين الاستعلام في ( construct ) لاستخدامه في كامل الكنترول،

لكن في حال اردنا تجنب نفس الاستعلام في عدة متحكمات ( controllers ) هناك طريقتين:

-  ( View::share ) نشر المتغير بكامل المشروع  

- ( View::composer ) تحديد القوالب المراد تمرير المتغير لها فقط 

 

سوف استخدم في هذا المثال طريقة ( View::composer )

الطريقة هي انشاء كلاس ( CategoryComposer ) في مجلد ( Http / View / Composers ) مثال:

<?php

namespace App\Http\View\Composers;

use App\Models\Category;
use Illuminate\View\View;

class CagegoryComposer
{
    /**
     * Bind data to the view.
     *
     * @param  \Illuminate\View\View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('categories', Category::all());
    }
}

 

ومن ثم تحديد قالب او عدة قوالب وتمرير المتغير لها من خلال  البوت ميثود ( boot method ) ملف ( AppServiceProvider.php )،  كالتالي:

public function boot()
{
    View::composer(['admin.products.index', 'admin.products.create'], CategoryComposer::class);
}

 

الان يمكن للقوالب التي تم تحديدها في  ملف ( AppServiceProvider.php ) ان تصل لقيمة المتغير بشكل افتراضي دون الحاجة للاستعلام من الكنترولر .

اصبح الكنترولر كالتالي :

public function index()
{
    return view('admin.products.index');
}

public function create()
{

    return view('admin.products.create');
}

 

الردود
تظهر النقاشات للطلاب المشتركين فقط