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:作曲家を使用する:
- 作曲家ファイルを作成します
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に配置することをお勧めします。
作曲家ファイルを作成します
app\Composers\HomeComposer.php
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);
}
}