現在のログインユーザー=$userとし、全ビューページでこの$user共有したい、という場合には、view composerを使うと便利です。
view composerの設定方法を解説していきますね。
Laravelで認証済みユーザ変数を全ページで共有したい時のview composer 設定方法
既にプロジェクトに認証機能が搭載されている、という前提で解説をしていきます。
①ServiceProvider作成
まずは下記コマンドを実行して、ViewComposerServiceProviderを作成します。
php artisan make:provider ViewComposerServiceProvider
②config/app.phpに登録
次にconfig/app.phpに作成したServiceProvidereを登録します。
‘providers’ => [] の中に、App\Providers\ViewComposerServiceProvider::class, を追加してください。
'providers' => [
App\Providers\ViewComposerServiceProvider::class,
]
③作成したファイルの編集
app/Providers/ViewComposerServiceProvider.phpを開きます。
Illuminate\Support\Facades\View; をuse宣言に加えます。
またbootメソッドは下記のように記述し、$user=認証済みユーザとします。
【ViewComposerServiceProvider.php】
<?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()のほうが手軽な気もします。
用途によって使い分けてくださいね。



コメント