tips:都是使用 View 門面來訪問
Illuminate\Contracts\View\Factory
的底層實現
有時須要在全部視圖之間共享數據片斷,這時候能夠使用視圖門面的 share 方法。php
1,通常狀況下,我會在app\http\Controllers\xx
下建立一個基礎控制器 BaseController.php
,json
<?php namespace App\Http\Controllers\ExtMan; use Illuminate\Routing\Controller; 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:
建立app\Helpers\ExtmanFun.php
,composer.json
的autoload
引入數組
"files":[ "app/Helpers/ExtmanFun.php" ]
運行
composer dump-autoload
會自動加載
2,在 AppServiceProvider
服務提供器(或者新建提供器) 的boot
方法中調用share()
app
<?php namespace App\Providers; use View; class AppServiceProvider extends ServiceProvider { /** * 啓動全部應用服務 * * @return void */ public function boot() { View::share('key', 'value'); //也可以使用 view()->share('name','共享數據片斷'); } }
視圖合成器是當視圖被渲染時的 回調函數 或 類方法 ,若是你每次渲染視圖時都要綁定視圖的數據,好比用戶登錄信息。能夠使用composer()
將邏輯組織到一個單獨的地方。
本例中,咱們將在AppServiceProvider
服務提供器中註冊視圖合成器,
提供器代碼以下:composer
<?php namespace App\Providers; #use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot() { // 使用基於類方法 // 第一個參數能夠指定共享給那個視圖,多個視圖用數組,共享到所有視圖能夠用 * // 或者某個目錄下全部視圖 view()->composer( //'*', '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
ide
<?php namespace App\Http\ViewComposers; use Illuminate\View\View; use Illuminate\Repositories\UserRepository; 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
方法被調用,同時 Illuminate\View\View
實例被注入該方法,從而能夠使用其 with 方法來綁定數據到視圖。函數
全部的視圖合成器都會經過 服務容器 進行解析,因此你能夠在視圖合成器的構造函數中類型提示須要注入的依賴項。