首頁  >  文章  >  後端開發  >  詳解Laravel視圖間共享資料與視圖Composer_php實例

詳解Laravel視圖間共享資料與視圖Composer_php實例

WBOY
WBOY原創
2016-08-17 13:02:371178瀏覽

1、在視圖間共享資料

除了在單一視圖中傳遞指定資料之外,有時需要在所有視圖中傳入同一數據,即我們需要在不同視圖中共享資料。要實現這一目的,需要使用視圖工廠的share方法。

全域幫助函數viewresponse類似,如果傳入參數,則傳回IlluminateViewView實例,不傳入參數則傳回IlluminateViewFactory實例。所以我們可以透過在服務提供者的boot方法中使用以下方式實現視圖間共享資料:

<&#63;php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    //视图间共享数据
    view()->share('sitename','Laravel学院');
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

我們在routes.php中定義兩個路由:

Route::get('testViewHello',function(){
  return view('hello');
});

Route::get('testViewHome',function(){
  return view('home');
});

然後在resources/views目錄下建立一個home.blade.php視圖文件,內容如下:

{{$sitename}}首页

再建立一個hello.blade.php視圖檔:

欢迎来到{{$sitename}}!

在瀏覽器中分別造訪http://laravel.app:8000/testViewHellohttp://laravel.app:8000/testViewHome,則都能解析出$sitename的值。

2、視圖Composer

有時候我們想要在每次視圖渲染時綁定一些特定資料到視圖中,例如登入使用者信息,這時候我們就要用到視圖Composer,視圖Composer透過視圖工廠的composer方法實作。此方法的第二個回呼參數支援基於控制器動作和閉包函數兩種方式。

簡單起見,我們還是基於AppServiceProvider,不去單獨建立服務提供者,這裡我們傳遞閉包參數(控制器動作參考視圖文件):

<&#63;php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    //视图间共享数据
    view()->share('sitename','Laravel学院');

    //视图Composer
    view()->composer('hello',function($view){
      $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
    });
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

修改hello.blade.php視圖檔:

歡迎來到{{$sitename}}!

<h3>用户信息</h3>
用户名:{{$user['name']}}<br>
用户头像:{{$user['avatar']}}

在瀏覽器中訪問http://laravel.app:8000/testViewHello,輸出內容如下:

欢迎来到Laravel学院!

用户信息

用户名:test
用户头像:/path/to/test.jpg

你也可以傳遞資料到多個視圖:

view()->composer(['hello','home'],function($view){
  $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
});

甚至所有視圖(使用通配符*):

view()->composer('*',function($view){
  $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
});

以上就是Laravel視圖間共享資料及視圖Composer的詳細內容,希望本文對大家學習Laravel有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn