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