[Laravel] 全てのページで同じデータを表示したいときの効率的な方法

スポンサーリンク

例えば。
作っているサイトには全ページに常にサイドバーがあり、そこに最新のブログ記事(ここではPostモデルとします)の5件のリンクを貼るとします。

全てのコントローラーでPostモデルへの同じ取得クエリを書くのは非効率的なので、どうにかしてまとめたい。

そんな時に使えるのがView::share()です。
これをとりあえずAppServiceProviderのbootメソッドに記載することで全てのビューに渡す変数が作成できます。

app/Providers/AppServiceProvider.php

こんな感じでAppServiceProviderのboot内にView::shareを書いておくと、全てのビュー内で変数postsが使用できるようになります。
当然shareの第1引数は好きな名前に、第2引数は好きな値に変えられます。

追記。
この方法を使うとHTTPリクエスト以外にも全てのArtisanコマンドなどでbootの中身が実行されるみたいです。
例えばdocker-composeでDBより先にartisan serve起動するとエラーになったりします。(restart: alwaysで一応誤魔化せる)
HTTPリクエストだけにするなら他に良い場所があるのかも。

スポンサーリンク

シェアする

フォローする