目錄
- 前言
- 在視圖間共享數(shù)據(jù)
- 視圖Composer
- 總結
前言
在做項目中,網(wǎng)站前臺或者后臺有些數(shù)據(jù)需要在多個視圖頁面使用,例如用戶基本信息數(shù)據(jù),菜單展示數(shù)據(jù)。首先想到的是在每個控制器里傳入這些需要的數(shù)據(jù),但顯然這并不科學。經(jīng)查視圖文檔了解,可以使用視圖間共享數(shù)據(jù)和視圖Composer解決。
在視圖間共享數(shù)據(jù)
有時候我們需要在所有視圖之間共享數(shù)據(jù)片段,這時候可以使用視圖工廠的 share 方法,通常,需要在服務提供者的 boot 方法中調用 share 方法,你可以將其添加到 AppServiceProvider 或生成獨立的服務提供者來存放它們:
?php
namespace App\Providers;
class AppServiceProvider extends ServiceProvider
{
/**
* 啟動所有應用服務
*
* @return void
*/
public function boot()
{
view()->share('name', 'dashuai');
}
/**
* 注冊服務提供者
*
* @return void
*/
public function register()
{
//
}
}
在各視圖中使用 $name 即可調用。
視圖Composer
視圖Composer 是當視圖被渲染時的回調或類方法。如果你有一些數(shù)據(jù)要在視圖每次渲染時都做綁定,可以使用視圖 Composer 將邏輯組織到一個單獨的地方。
首先要在服務提供者中注冊視圖 Composer,我們將會使用輔助函數(shù) view 來訪問 Illuminate\Contracts\View\Factory 的底層實現(xiàn),記住,Laravel 不會包含默認的視圖 Composer 目錄,我們可以按照自己的喜好組織其路徑,例如可以創(chuàng)建一個 App\Http\ViewComposers 目錄:
?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* 在容器中注冊綁定.
*
* @return void
* @author http://laravelacademy.org
*/
public function boot()
{
// 使用基于類的composers...
view()->composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
// 使用基于閉包的composers...
view()->composer('dashboard', function ($view) {
});
}
/**
* 注冊服務提供者.
*
* @return void
*/
public function register()
{
//
}
}
如果創(chuàng)建一個新的服務提供者來包含視圖 Composer 注冊,需要添加該服務提供者到配置文件 config/app.php 的 providers 數(shù)組中。
現(xiàn)在我們已經(jīng)注冊了 Composer,每次 profile 視圖被渲染時都會執(zhí)行 ProfileComposer@compose,接下來我們來定義該 Composer 類:
?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
use Illuminate\Users\Repository as UserRepository;
class ProfileComposer
{
/**
* 用戶倉庫實現(xiàn).
*
* @var UserRepository
*/
protected $users;
/**
* 創(chuàng)建一個新的屬性composer.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
// Dependencies automatically resolved by service container...
$this->users = $users;
}
/**
* 綁定數(shù)據(jù)到視圖.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('count', $this->users->count());
}
}
視圖被渲染前,Composer 類的 compose 方法被調用,同時 Illuminate\Contracts\View\View 被注入該方法,從而可以使用其 with 方法來綁定數(shù)據(jù)到視圖。
添加 Composer 到多個視圖
你可以傳遞視圖數(shù)組作為 composer 方法的第一個參數(shù)來一次性將視圖 Composer 添加到多個視圖:
view()->composer(
['profile', 'dashboard'],
'App\Http\ViewComposers\MyViewComposer'
);
composer 方法接受 * 通配符,從而允許將一個 Composer 添加到所有視圖:
view()->composer('*', function ($view) {
//
});
總結
到此這篇關于laravel多視圖共享數(shù)據(jù)的文章就介紹到這了,更多相關laravel多視圖共享數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Laravel框架實現(xiàn)多個視圖共享相同數(shù)據(jù)的方法詳解