W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
視圖合成器是在呈現(xiàn)視圖時調(diào)用的回調(diào)或類方法。如果希望每次呈現(xiàn)視圖時將數(shù)據(jù)自動綁定到視圖中,則視圖合成器可以幫助您將這些邏輯組織到一起:
默認情況下,Laravel
沒有存放視圖合成器的目錄,您可以根據(jù)需要來重新建立目錄。例如: app/Http/View/Composers
。在下面這個例子中,我們會在一個 service provider 中注冊視圖合成器。 使用 View
門面(Facade)來實現(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)建了新的一個服務提供者來存放你注冊視圖合成器的代碼,那么你需要將這個服務提供器添加到配置文件
config/app.php
的providers
數(shù)組中。
現(xiàn)在我們注冊了視圖合成器,每次渲染 profile
視圖時都會執(zhí)行 ProfileComposer@compose
方法。那么下面我們來定義視圖合成器的這個類吧:
<?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
方法會在視圖渲染之前被調(diào)用,并傳入一個 Illuminate\View\View
實例。你可以使用 with
方法將數(shù)據(jù)綁定到視圖。
技巧:所有的視圖合成器都會通過 服務容器 進行解析,所以你可以在視圖合成器的構造函數(shù)中類型提示需要注入的依賴項。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: