laravel5.5框架中視圖間如何共享數據?視圖間共享數據的兩種方法(附代碼)

laravel框架中視圖間共享數據有兩種,一種是用視圖門面share()方法實現,另一種是用視圖門面composer() 方法實現,那么,兩種方法的實現究竟是怎樣的呢?讓我們來看一看接下來的文章內容。

首先,需要注意的一點是:都是使用 View 門面來訪問 IlluminateContractsViewFactory 的底層實現

視圖門面share()方法

有時需要在所有視圖之間共享數據片段,這時候可以使用視圖門面的 share 方法。

1,一般情況下,我會在apphttpControllersxx下創建一個基礎控制器 BaseController.php,

<?php namespace AppHttpControllersExtMan;  use IlluminateRoutingController;  class BaseController extends Controller {     public function __construct(Auth $auth)     {         $this->initViewShare();    //視圖共享數據     }     /**      *  視圖共享數據方法      */     public function initViewShare()     {         view()->share('action_name',get_action_name()); //當前URL的方法器名      } }   //視圖使用  //共享視圖一般都是在layout中 {{ $action_name }}

get_action_name() 是自定義的一個函數。

tips:
創建 appHelpersExtmanFun.php , composer.json的autoload引入

?"files":[ ?????"app/Helpers/ExtmanFun.php" ?]

運行 composer dump-autoload 會自動加載

2,在 AppServiceProvider 服務提供器(或者新建提供器) 的boot方法中調用share()

<?php namespace AppProviders; use View; class AppServiceProvider extends ServiceProvider {     /**      * 啟動所有應用服務      *      * @return void      */     public function boot()     {         View::share('key', 'value');         //也可使用         view()->share('name','共享數據片段');     } }

視圖門面composer()方法

視圖合成器是當視圖被渲染時的回調函數或類方法 ,如果你每次渲染視圖時都要綁定視圖的數據,比如用戶登陸信息。可以使用composer() 將邏輯組織到一個單獨的地方。
本例中,我們將在AppServiceProvider服務提供器中注冊視圖合成器,
提供器代碼如下:

<?php namespace AppProviders;  #use IlluminateSupportFacadesView; use IlluminateSupportServiceProvider; class AppServiceProvider extends ServiceProvider {     public function boot()     {         // 使用基于類方法         // 第一個參數可以指定共享給那個視圖,多個視圖用數組,共享到全部視圖可以用 *         // 或者某個目錄下所有視圖          view()->composer(             //'*', 'AppHttpViewComposersAuthComposer'             //['extman.home, welcome'], 'AppHttpViewComposersAuthComposer'             ['extman.*'], 'AppHttpViewComposersAuthComposer'         );          //使用基于回調函數         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 方法。
定義視圖合成器類 AppHttpViewComposersAuthComposer.php

<?php namespace AppHttpViewComposers;  use IlluminateViewView; use IlluminateRepositoriesUserRepository;  class AuthComposer {     protected $users;      public function __construct(UserRepository $users)     {         // 依賴注入通過服務容器自動解析...         $this->users = $users;     }      //綁定數據到視圖     public function compose(View $view)     {         $user_info = Auth::user();         $view->with('motto', $user_info);         $view->with('count', $this->users->count());     } }

視圖被渲染前,AuthComposer類的 compose 方法被調用,同時 IlluminateViewView 實例被注入該方法,從而可以使用其 with 方法來綁定數據到視圖。

所有的視圖合成器都會通過 服務容器 進行解析,所以你可以在視圖合成器的構造函數中類型提示需要注入的依賴項。

相關文章推薦:

laravel

laravel

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享