Laravel5.4框架中視圖共享數(shù)據(jù)的方法詳解
本文實(shí)例講述了Laravel5.4框架中視圖共享數(shù)據(jù)的方法。分享給大家供大家參考,具體如下:
每個(gè)人都會(huì)遇到這種情況:某些數(shù)據(jù)還在每個(gè)頁面進(jìn)行使用,比如用戶信息,或者菜單數(shù)據(jù),最基本的做法是在每個(gè)視圖空控制器中傳入這些數(shù)據(jù),但顯然并不是我們想要的結(jié)果。另一種方法就是使用視圖數(shù)據(jù)共享,視圖數(shù)據(jù)共享的基本使用很簡單,可查看視圖文檔了解詳情,這里我們演示兩個(gè)使用示例:在視圖間共享數(shù)據(jù)和視圖Composer
在視圖中共享數(shù)據(jù)
除了在單個(gè)視圖中傳遞指定數(shù)據(jù)之外,有時(shí)候需要在所有視圖中傳入同一數(shù)據(jù),即我們需要在不同視圖中共享數(shù)據(jù)。要實(shí)現(xiàn)這一目的,需要使用視圖工廠的share方法。
全局幫助函數(shù)view和response類似,如果傳入?yún)?shù),則返回Illuminate\View\View實(shí)例,不傳入?yún)?shù)則返回Illuminate\View\Factory實(shí)例。所以我們可以通過在服務(wù)提供者的boot方法中使用如下方式實(shí)現(xiàn)視圖間共享數(shù)據(jù):
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //視圖間共享數(shù)據(jù) view()->share('name','高偉'); } /** * Register any application services. * * @return void */ public function register() { // } }
接下來我直接用一個(gè)空的Laravel項(xiàng)目做演示,我們在 routes 文件首頁(welcome.blade.php)視圖:
Route::get('/', function () { return view('welcome'); });
然后在視圖中輸出視圖共享數(shù)據(jù):
<!DOCTYPE html> <html> <head> <title>Laravel</title> <style> html, body { height: 100%; } body { margin: 0; padding: 0; width: 100%; display: table; font-weight: 100; font-family: 'Lato'; } .container { text-align: center; display: table-cell; vertical-align: middle; } .content { text-align: center; display: inline-block; } .title { font-size: 96px; } </style> </head> <body> <div class="container"> <div class="content"> <div class="title">Laravel 5</div> <h1>hello,{{$name}}</h1> </div> </div> </body> </html>
視圖Composer
上面的一種做法雖然可行,但是在別人下載項(xiàng)目后,共享數(shù)據(jù)是從數(shù)據(jù)庫中獲取的,執(zhí)行數(shù)據(jù)遷移的時(shí)候會(huì)報(bào)錯(cuò)。這時(shí)候我們就要用到視圖Composer,視圖Composer通過視圖工廠的composer方法實(shí)現(xiàn)。該方法的第二個(gè)回調(diào)參數(shù)支持基于控制器動(dòng)作和閉包函數(shù)兩種方式。
控制器的動(dòng)作方式
首先要在服務(wù)提供者中注冊視圖 Composer,我們將會(huì)使用輔助函數(shù) view 來訪問 Illuminate\Contracts\View\Factory 的底層實(shí)現(xiàn),記住,Laravel 不會(huì)包含默認(rèn)的視圖 Composer 目錄,我們可以按照自己的喜好組織其路徑,例如可以創(chuàng)建一個(gè) App\Http\ViewComposers 目錄:
<?php namespace App\Http\ViewComposers; use Illuminate\Contracts\View\View; /** * 基于類的實(shí)現(xiàn)方式 */ class MottoComposer { /** * 共享數(shù)據(jù) * @date 2018-01-13 * @author 高偉 * @param View $view [description] * @return [type] [description] */ public function compose(View $view) { $view->with('motto', '嘎嘎嘎,我一直在努力!'); } }
然后我們在 AppServiceProvider 中繼續(xù)添加共享數(shù)據(jù):
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { view()->share('name','高偉'); // 使用基于類的composers...第一個(gè)參數(shù)可以指定共享給那個(gè)視圖,多個(gè)視圖用數(shù)組,共享到全部視圖可以用 * view()->composer( 'welcome', 'App\Http\ViewComposers\MottoComposer' ); } /** * Register any application services. * * @return void */ public function register() { // } }
在視圖中顯示共享數(shù)據(jù):
... <div class="content"> <div class="title">Laravel 5</div> <h1>hello,{{$name}}</h1> <p>{{$motto}}</p> </div> ...
閉包實(shí)現(xiàn)方式
閉包的實(shí)現(xiàn)方式相對來說簡單很多,這里就簡單貼書代碼:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { view()->share('name','高偉'); // 使用基于類的composers... view()->composer( 'welcome', 'App\Http\ViewComposers\MottoComposer' ); // 閉包實(shí)現(xiàn)方式 view()->composer('*',function($view) { $view->with('info','http://www.iwanli.me'); }); } /** * Register any application services. * * @return void */ public function register() { // } }
視圖中顯示數(shù)據(jù):
... <div class="content"> <div class="title">Laravel 5</div> <h1>hello,{{$name}}</h1> <p>{{$motto}}</p> <p>{{$info}}</p> </div> ...
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進(jìn)階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。
- laravel框架模型、視圖與控制器簡單操作示例
- Laravel 5框架學(xué)習(xí)之模型、控制器、視圖基礎(chǔ)流程
- Laravel 5框架學(xué)習(xí)之路由、控制器和視圖簡介
- laravel通過a標(biāo)簽從視圖向控制器實(shí)現(xiàn)傳值
- 跟我學(xué)Laravel之視圖 & Response
- Laravel 5框架學(xué)習(xí)之向視圖傳送數(shù)據(jù)
- Laravel 5框架學(xué)習(xí)之子視圖和表單復(fù)用
- Laravel框架學(xué)習(xí)筆記(二)項(xiàng)目實(shí)戰(zhàn)之模型(Models)
- Laravel模型事件的實(shí)現(xiàn)原理詳解
- Laravel框架控制器,視圖及模型操作圖文詳解
相關(guān)文章
laravel7學(xué)習(xí)之無限級分類的最新實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于laravel7學(xué)習(xí)之無限級分類的最新實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Laravel 5使用Laravel Excel實(shí)現(xiàn)Excel/CSV文件導(dǎo)入導(dǎo)出的功能詳解
這篇文章主要給大家介紹了關(guān)于在Laravel 5中如何使用Laravel Excel實(shí)現(xiàn)Excel/CSV文件導(dǎo)入導(dǎo)出功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下。2017-10-10php無限級分類實(shí)現(xiàn)評論及回復(fù)功能
這篇文章主要為大家詳細(xì)介紹了php無限級分類實(shí)現(xiàn)評論及回復(fù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02優(yōu)化WordPress的Google字體以加速國內(nèi)服務(wù)器上的運(yùn)行
這篇文章主要介紹了優(yōu)化WordPress的Google字體以加速國內(nèi)服務(wù)器上的運(yùn)行的方法,由于谷歌在內(nèi)地被墻導(dǎo)致其更新等方面都收到不同程度的影響,需要的朋友可以參考下2015-11-11yii gridview實(shí)現(xiàn)時(shí)間段篩選功能
這篇文章主要為大家詳細(xì)介紹了yii gridview實(shí)現(xiàn)時(shí)間段篩選功能,一個(gè)輸入框,自動(dòng)提交功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08laravel csrf排除路由,禁止,關(guān)閉指定路由的例子
今天小編就為大家分享一篇laravel csrf排除路由,禁止,關(guān)閉指定路由的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10php和redis實(shí)現(xiàn)秒殺活動(dòng)的流程
這篇文章主要介紹了php和redis設(shè)計(jì)秒殺活動(dòng)的流程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07