Laravel 5.4を使用しています。
ComposerServiceProviderの作成
最初にapp/Providers/にComposerServiceProvider.phpを作成します。
例えばViewに$hogeという変数で「hogehoge」と表示させたい場合は下記のようにします。
app/Providers/ComposerServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('*', function($view) {
$view->with('hoge', 'hogehoge');
});
}
}
View::composerの第一引数に表示するViewを指定します。
| ‘*’ | すべてのView |
|---|---|
| ‘layouts/app’ | layouts/app.blade.phpを使用しているView |
| [‘posts/*’,’tags/*’] |
posts、tagsディレクトリ内のView 配列にすることで複数の指定したViewで使用できます。 |
providersにComposerServiceProviderの登録
作成したComposerServiceProviderをconfig/app.phpのprovidersに登録します。
config/app.php
'providers' => [ // ・・・ App\Providers\ComposerServiceProvider::class, ],
これでViewで使用することができます。
指定したViewで$hoge変数が展開できるはずです。
ViewComposerをクラス化して外部ファイルにする
設定するViewComposerが多くなるとComposerServiceProviderクラスが肥大化してしまいます。
クラス化して外部ファイルにする方法をご紹介します。
ファイルを作成する場所は任意の場所で大丈夫ですが、ここではapp/Http/ViewComposersに作成します。
app/Http/ViewComposers/HogeComposer.php
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
class HogeComposer
{
/**
* @var String
*/
protected $hoge;
public function __construct()
{
$this->hoge = 'hogehoge';
}
/**
* Bind data to the view.
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('hoge', $this->hoge);
}
}
あとはComposerServiceProvider.phpを下記のように変更します。
app/Providers/ComposerServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('*', 'App\Http\ViewComposers\HogeComposer');
}
}
参考サイト
ビュー 5.4 Laravel – ビューコンポーザ

