Laravel 5.4を使用しています。
ComposerServiceProviderの作成
最初にapp/Providers/にComposerServiceProvider.phpを作成します。
例えばViewに$hogeという変数で「hogehoge」と表示させたい場合は下記のようにします。
<?phpnamespace 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に登録します。
'providers' => [ // ・・・ App\Providers\ComposerServiceProvider::class,],これでViewで使用することができます。
指定したViewで$hoge変数が展開できるはずです。
ViewComposerをクラス化して外部ファイルにする
設定するViewComposerが多くなるとComposerServiceProviderクラスが肥大化してしまいます。
クラス化して外部ファイルにする方法をご紹介します。
ファイルを作成する場所は任意の場所で大丈夫ですが、ここではapp/Http/ViewComposersに作成します。
<?phpnamespace 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を下記のように変更します。
<?phpnamespace App\Providers;
use Illuminate\Support\Facades\View;use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider{ public function boot() { View::composer('*', 'App\Http\ViewComposers\HogeComposer'); }}
