現在のログインユーザー=$userとし、全ビューページでこの$user共有したい、という場合には、view composerを使うと便利です。
view composerの設定方法を解説していきますね。
Laravelで認証済みユーザ変数を全ページで共有したい時のview composer 設定方法
既にプロジェクトに認証機能が搭載されている、という前提で解説をしていきます。
①ServiceProvider作成
まずは下記コマンドを実行して、ViewComposerServiceProviderを作成します。
1 |
php artisan make:provider ViewComposerServiceProvider |
②config/app.phpに登録
次にconfig/app.phpに作成したServiceProvidereを登録します。
‘providers’ => [] の中に、 App\Providers\ViewComposerServiceProvider::class, を追加してください。
1 2 3 |
'providers' => [ App\Providers\ViewComposerServiceProvider::class, ] |
③作成したファイルの編集
app/Providers/ViewComposerServiceProvider.phpを開きます。
Illuminate\Support\Facades\View; をuse宣言に加えます。
またbootメソッドは下記のように記述し、$user=認証済みユーザとします。
【ViewComposerServiceProvider.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; class ViewComposerServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { // } /** * Bootstrap services. * * @return void */ public function boot() { View::composer('*', function ($view) { $view->with('user', auth()->user()); }); } } |
以上です。
これでコントローラで定義しなくても、プロジェクト内のビューファイルで $user変数が使えるようになります。
たとえば {{$user->name}} とすると、ログイン中のユーザーの名前が表示されます。
なお似たような機能として、view->share()メソッドがあります。こちらも全ページで共有する変数を定義できます。
ただview->share()は実行タイミングが早すぎるために、認証済みユーザーを定義できません。
view->share()についてはこちらの記事で解説しているので、併せて参考にしてください。
個人的にはview->share()のほうが手軽な気もします。
用途によって使い分けてくださいね。