【Laravel】ビューコンポーザを使ってビューのロジックを分離する
こんにちは、技術部のUです。今回はLaravelでビューコンポーザを使ってビューのロジックをコントローラーから分離する方法についてです。
ビューコンポーザとは
ビューをレンダーするときに呼び出すコールバックまたはクラスメソッドです。ビューをレンダーするたびにビューへ結合するデータがある場合、ビューコンポーザを使用すると、そのロジックを1つの場所に集約できます。
つまり、ビューを表示する際のビジネスロジックをコントローラから分離して記述することができます。
共通するデータを複数ページで表示したい時等にビューコンポーザを使うとファットコントローラ改善に役立ちます。ヘッダーやサイドナビなどの共通レイアウトにデータを渡したい時などに役立ちます。
今回はヘッダーとプロフィールにログインユーザー情報を渡す想定で進めます。
実装手順
以下のような手順で実装を進めていきます。
①ServiceProviderを準備
②config/app.phpに登録
③Composerクラスを作成
④ServiceProviderへ設定
⑤設定した値をbladeで使用
①ServiceProviderを準備
$ php artisan make:provider ViewComposerServiceProvider を実行して、ServiceProviderを作成します。
ViewComposerServiceProvider.php
②config/app.phpに登録
作成したServiceProviderをconfig/app.phpに登録します。
'providers' => [
App\Providers\ViewComposerServiceProvider::class, // 追加
],
③Composerクラスを作成
下記コマンドを実行してapp/Http/View/Composers配下にUserComposer.phpを作成します。
$ mkdir -p app/View/Composers && cd "$_"
$ touch UserComposer.php
with('user', Auth::user());
}
}
④ServiceProviderへ設定
⑤設定した値をbladeで使用
ヘッダーとプロフィールのbladeで $user を利用するように変更します。
これでコントローラからビューにログインユーザー情報を渡さなくても表示できるはずです。
さいごに
簡易的ではありますが、ビューコンポーザについて書かせていただきました。
少しでもお役に立てれば幸いです。
Laravelを使う上でコントローラの肥大化防止は逃げられない課題だと思いますので、適宜利用していければと思います。
最後までお読みいただきありがとうございました。
関連記事
- 2022-11-14
- テクノロジー