Laravelで全ページ共通の変数を設定したい時はview shareが便利

Laravel・PHP豆知識・トラブル対策

Laravelですべてのビューページで共通して使える変数を設定するには、viewファサードのshareメソッドが便利です。

ただ、これを設定した後にエラーが発生するケースもあります。

Junko
Junko

わたしが実際、経験しました。

エラーの回避方法とともに、view shareの設定方法をコードと共に解説していきますね。

Laravelで全ページ共通の変数を設定する方法

たとえば、postsテーブルの内容を$posts変数に代入して、この$posts変数を全ページで使いたいとします。

app/Providers/AppServiceProvider.php を開きます。

ファイルの上部に、下記のuse宣言を加えておきます。

【AppServiceProvider.php】

public function boot () に下記コードを入れます。

【AppServiceProvider.php】

これだけで、すべてのビューページで $posts 変数が使えるようになります!

頻繁に使う変数であれば、毎回メソッドで変数を定義するのは面倒ですよね。

そういった時に、ご活用ください。ただ、注意点があります…

ロールバックしたときにエラーになる

ロールバックして該当テーブルを削除した後はエラーになるので、注意してくださいね。

先程の例でいえば、postsテーブルをロールバック等で削除してしまうと、$posts変数が定義できなくなり、ページを表示しようとするとエラーになります。

postsテーブルを再度作成するとエラーは元に戻ります。

Junko
Junko

エラーを避けるには、ロールバック前に view()->share を無効にしておくと良いですよ。

view()->shareメソッドでは、認証済みユーザーは設定できない

全ビューページで共通して使う変数としては、認証済みのユーザが最も需要があるかと思います。

ただ認証済みユーザは、ご紹介したview()->shareメソッドでは共有できません。

たとえば次のようなコードを入れると、「Trying to get property ‘name’ of non-object」エラーになります。

【AppServiceProvider.php】

理由は、bootメソッドはauth()->user()が初期化されて使えるようになる前に実行されてしまうからです。

こういった時の対処法は別の記事で解説しているので、ご興味があれば併せて読んでくださいね。

コメント

タイトルとURLをコピーしました