laravel多視圖共享數(shù)據(jù)實(shí)例代碼
前言
在做項(xiàng)目中,網(wǎng)站前臺或者后臺有些數(shù)據(jù)需要在多個視圖頁面使用,例如用戶基本信息數(shù)據(jù),菜單展示數(shù)據(jù)。首先想到的是在每個控制器里傳入這些需要的數(shù)據(jù),但顯然這并不科學(xué)。經(jīng)查視圖文檔了解,可以使用視圖間共享數(shù)據(jù)和視圖Composer解決。
在視圖間共享數(shù)據(jù)
有時候我們需要在所有視圖之間共享數(shù)據(jù)片段,這時候可以使用視圖工廠的 share 方法,通常,需要在服務(wù)提供者的 boot 方法中調(diào)用 share 方法,你可以將其添加到 AppServiceProvider 或生成獨(dú)立的服務(wù)提供者來存放它們:
<?php namespace App\Providers; class AppServiceProvider extends ServiceProvider { /** * 啟動所有應(yīng)用服務(wù) * * @return void */ public function boot() { view()->share('name', 'dashuai'); } /** * 注冊服務(wù)提供者 * * @return void */ public function register() { // } }
在各視圖中使用 $name 即可調(diào)用。
視圖Composer
視圖Composer 是當(dāng)視圖被渲染時的回調(diào)或類方法。如果你有一些數(shù)據(jù)要在視圖每次渲染時都做綁定,可以使用視圖 Composer 將邏輯組織到一個單獨(dú)的地方。
首先要在服務(wù)提供者中注冊視圖 Composer,我們將會使用輔助函數(shù) view 來訪問 Illuminate\Contracts\View\Factory 的底層實(shí)現(xiàn),記住,Laravel 不會包含默認(rèn)的視圖 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) { }); } /** * 注冊服務(wù)提供者. * * @return void */ public function register() { // } }
如果創(chuàng)建一個新的服務(wù)提供者來包含視圖 Composer 注冊,需要添加該服務(wù)提供者到配置文件 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 { /** * 用戶倉庫實(shí)現(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 方法被調(diào)用,同時 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) { // });
總結(jié)
到此這篇關(guān)于laravel多視圖共享數(shù)據(jù)的文章就介紹到這了,更多相關(guān)laravel多視圖共享數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php過濾HTML標(biāo)簽、屬性等正則表達(dá)式匯總
這篇文章主要介紹了php過濾HTML標(biāo)簽、屬性等正則表達(dá)式匯總,本文使用代碼實(shí)例給出了過濾HTML內(nèi)容的正則表達(dá)式,具體說明請參閱代碼中的注釋,本文對使用PHP做采集的朋友有比較大的作用,需要的朋友可以參考下2014-09-09Smarty結(jié)合Ajax實(shí)現(xiàn)無刷新留言本實(shí)例
Smarty結(jié)合Ajax實(shí)現(xiàn)無刷新留言本實(shí)例...2007-01-01PHP中header函數(shù)的用法及其注意事項(xiàng)詳解
這篇文章主要介紹了PHP中header函數(shù)的用法及其注意事項(xiàng) 的相關(guān)資料,非常不錯具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06PHP開發(fā)框架kohana3 自定義路由設(shè)置示例
這篇文章主要介紹了PHP開發(fā)框架kohana3 自定義路由設(shè)置示例,kohana是一個純PHP5的開發(fā)框架,需要的朋友可以參考下2014-07-07PHP微信開發(fā)之微信消息自動回復(fù)下所遇到的坑
這篇文章是小編給大家介紹的微信消息自動回復(fù)下所遇到的坑的相關(guān)內(nèi)容,在日常項(xiàng)目開發(fā)中經(jīng)常遇到,非常具有參考借鑒價(jià)值,感興趣的小伙伴一起學(xué)習(xí)吧2016-05-05