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 – ビューコンポーザ