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()が初期化されて使えるようになる前に実行されてしまうからです。

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

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

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【AWS関連・Webアプリ開発・生成AIのAPI活用のご相談承ってます】
お気軽にお声がけください。
御社にとって、最善の方法をご一緒に考えてまいります。
Zoomミーティング実施中。サンプルアプリご利用可能です。

お問合せフォーム

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

最新版Laravel11用のサポートガイドご用意しています。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました