laravel框架中視圖間共享資料有兩種,一種是用視圖門面share()方法實現,另一種是用視圖門面composer() 方法實現,那麼,兩種方法的實現究竟是怎麼樣的呢?讓我們來看看接下來的文章內容。
首先,需要注意的一點是:都是使用View 門面來存取Illuminate\Contracts\View\Factory 的底層實作
有時需要在所有視圖之間共用資料片段,這時候可以使用視圖門面的share 方法。
1,一般情況下,我會在app\http\Controllers\xx下建立一個基礎控制器 BaseController.php,
ac924c01a08f6900d864ce13cf1f9067initViewShare(); //视图共享数据 } /** * 视图共享数据方法 */ public function initViewShare() { view()->share('action_name',get_action_name()); //当前URL的方法器名 } } //视图使用 //共享视图一般都是在layout中 {{ $action_name }}
get_action_name() 是自訂的函數。
tips:
建立app\Helpers\ExtmanFun.php ,composer.json的autoload 引入
"files":[ "app/Helpers/ExtmanFun.php" ]
執行composer dump-autoload 會自動載入
2,在AppServiceProvider 服務提供者(或新建提供者) 的boot方法中呼叫share()
da2d57d3bdb10de22b42a0069dfc7eb3share('name','共享数据片段'); } }
視圖合成器是當視圖被渲染時的回呼函數或類別方法,如果你每次渲染視圖時都要綁定視圖的數據,例如使用者登陸資訊。可以使用composer() 將邏輯組織到一個單獨的地方。
本例中,我們將在AppServiceProvider服務提供者中註冊視圖合成器,
提供者程式碼如下:
cc1a47858451ba5ff0ab8b6b1b5c5200composer( //'*', 'App\Http\ViewComposers\AuthComposer' //['extman.home, welcome'], 'App\Http\ViewComposers\AuthComposer' ['extman.*'], 'App\Http\ViewComposers\AuthComposer' ); //使用基于回调函数 view()->composer('*',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); }); } other code }
如果建立一個新的服務提供者來包含視圖composer 註冊,需要新增此服務提供者到設定檔config/app.php 的providers 陣列中
到此已經註冊了視圖合成器,每次渲染extman目錄下所有視圖時都會執行AuthComposer@compose 方法。
定義視圖合成器類別App\Http\ViewComposers\AuthComposer.php
01c01bc34336503a6e00eaa6a82e83a6users = $users; } //绑定数据到视图 public function compose(View $view) { $user_info = \Auth::user(); $view->with('motto', $user_info); $view->with('count', $this->users->count()); } }
視圖被渲染前,AuthComposer類別的compose 方法被調用,同時Illuminate\View\View 實例被注入該方法,從而可以使用其with 方法來綁定資料到視圖。
所有的視圖合成器都會透過 服務容器 來解析,所以你可以在視圖合成器的建構函式中型別提示需要注入的依賴項。
相關文章推薦:
詳解Laravel視圖間共享資料與視圖Composer_php實例
Laravel 5框架學習之向視圖傳送數據,laravel框架
以上是laravel5.5框架中視圖間如何共享資料?視圖間共享資料的兩種方法(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!