Laravel 8 視圖合成器

2021-07-17 16:01 更新

視圖合成器是在呈現(xiàn)視圖時(shí)調(diào)用的回調(diào)或類方法。如果希望每次呈現(xiàn)視圖時(shí)將數(shù)據(jù)自動(dòng)綁定到視圖中,則視圖合成器可以幫助您將這些邏輯組織到一起:

默認(rèn)情況下,Laravel 沒有存放視圖合成器的目錄,您可以根據(jù)需要來(lái)重新建立目錄。例如: app/Http/View/Composers 。在下面這個(gè)例子中,我們會(huì)在一個(gè) service provider 中注冊(cè)視圖合成器。 使用 View 門面(Facade)來(lái)實(shí)現(xiàn)訪問底層的 Illuminate\Contracts\View\Factory 契約:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        View::composer(
            'profile', 'App\Http\View\Composers\ProfileComposer'
        );

        // Using Closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }
}

注意:記住,如果你創(chuàng)建了新的一個(gè)服務(wù)提供者來(lái)存放你注冊(cè)視圖合成器的代碼,那么你需要將這個(gè)服務(wù)提供器添加到配置文件 config/app.phpproviders 數(shù)組中。

現(xiàn)在我們注冊(cè)了視圖合成器,每次渲染 profile 視圖時(shí)都會(huì)執(zhí)行 ProfileComposer@compose 方法。那么下面我們來(lái)定義視圖合成器的這個(gè)類吧:

<?php

namespace App\Http\View\Composers;

use App\Repositories\UserRepository;
use Illuminate\View\View;

class ProfileComposer
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * Create a new profile composer.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        // Dependencies automatically resolved by service container...
        $this->users = $users;
    }

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }
}

視圖合成器的 compose 方法會(huì)在視圖渲染之前被調(diào)用,并傳入一個(gè) Illuminate\View\View 實(shí)例。你可以使用 with 方法將數(shù)據(jù)綁定到視圖。

技巧:所有的視圖合成器都會(huì)通過 服務(wù)容器 進(jìn)行解析,所以你可以在視圖合成器的構(gòu)造函數(shù)中類型提示需要注入的依賴項(xiàng)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)