【Laravel】テーブルのデータをすべてのビューで共有する方法
Laravelを利用していると、データベースのテーブルのデータを、すべてのビューで扱いたい場合があるかもしれません。
今回はそのような場合に、Eloquentモデルを利用し、テーブルのデータをすべてのビューで共有する方法となります。
【Laravel】テーブルのデータをすべてのビューで共有する方法
Laravelでは、アプリケーションの起動時に実行する処理をサービスプロバイダーで行います。
例では、そのサービスプロバイダで、Eloquentモデルを利用し、テーブルのデータをすべてのビューで共有します。
また、テーブルとそのモデルは、すでに作成してある前提としています。
サービスプロバイダーでviewとモデルを利用しテーブルのデータを共有
以下、サービスプロバイダーに追加するコードの例となります。
例では、デフォルトで用意されているサービスプロバイダーのAppServiceProviderを利用し、モデル名Exampleから取得したデータを、viewのヘルパー関数ですべてのビューに渡しています。
また、サービスプロバイダーのファイルは、app/Providers内にあります。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
// 利用するモデルをインポート
use App\Example;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// モデルからすべてのデータを取得
$result = Example::all();
// すべてのビューにモデルから取得したデータを渡す
view()->share('examples', $result);
}
}
AppServiceProviderに追加したコードは以下となります。
利用するモデルをインポート
ソースコードの8行目で、利用するモデルをインポートしています。
モデルで取得したデータをすべてのビューで共有
ソースコードの27行目からのbootメソッドに、以下の処理を追記しています。
まず、モデルのallメソッドで、すべてのテーブルのデータをコレクション(配列のラッパー)として取得します。
そして、viewのヘルパー関数のshareメソッドで、取得したテーブルのデータをすべてのビューで共有しています。
また、shareメソッドの第1引数にはビューで利用する際の変数名を指定し、第2引数に共有するデータを指定します。