Laravel 5 - すべてのテンプレートでグローバル Blade ビュー変数が利用可能 質問する

Laravel 5 - すべてのテンプレートでグローバル Blade ビュー変数が利用可能 質問する

Laravel 5 で、すべての Blade テンプレートで使用できるグローバル変数を作成するにはどうすればよいですか?

ベストアンサー1

オプション1:

次のように使用できますview::share():

<?php namespace App\Http\Controllers;

use View;

//You can create a BaseController:

class BaseController extends Controller {

    public $variable1 = "I am Data";

    public function __construct() {

       $variable2 = "I am Data 2";
       

       View::share ( 'variable1', $this->variable1 );
       View::share ( 'variable2', $variable2 );
       View::share ( 'variable3', 'I am Data 3' );
       View::share ( 'variable4', ['name'=>'Franky','address'=>'Mars'] );
    }  

}

class HomeController extends BaseController {

    //if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so:

    public function __construct(){
       parent::__construct();
    }

    public function Index(){
      //All variable will be available in views
      return view('home');
    }

}

オプション2:作曲家を使用する:

  1. 作曲家ファイルを作成しますapp\Composers\HomeComposer.php

注意:app\Composers存在しない場合は作成してください

<?php namespace App\Composers;

class HomeComposer
{
    
    public function compose($view)
    {
        //Add your variables
        $view->with('variable1',      'I am Data')
             ->with('variable2',      'I am Data 2');
    }
}

次に、次のようにしてコンポーザーを任意のビューにアタッチできます。

<?php namespace App\Http\Controllers;

use View;

class HomeController extends Controller{


    public function __construct(){
  
        View::composers([
            'App\Composers\HomeComposer'  => ['home'] //attaches HomeComposer to home.blade.php
        ]);

    }

    public function Index(){
        return view('home');
    }

}

オプション3:サービスプロバイダーにコンポーザーを追加します。Laravel 5では、コンポーザーをApp\Providers\ViewServiceProviderに配置することをお勧めします。

  1. 作曲家ファイルを作成しますapp\Composers\HomeComposer.php

  2. HomeComposer を App\Providers\ViewServiceProvider に追加します

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use View;
use App\Composers\HomeComposer;
use Illuminate\Support\Facades\Blade;

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

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //add to all views
        view()->composer('*', HomeComposer::class);
        //add to only home view 
        //view()->composer('home', HomeComposer::class);
    }
}

おすすめ記事