【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引数に共有するデータを指定します。

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。