【Laravel】テーブルのデータをすべてのビューで共有する方法

Laravelを利用していると、データベースのテーブルのデータを、すべてのビューで扱いたい場合があるかもしれません。

今回はそのような場合に、テーブルのデータをすべてのビューで共有する方法となります。

【Laravel】テーブルのデータをすべてのビューで共有する方法

Laravelでは、アプリケーションの起動時に実行する処理をサービスプロバイダーで行います。

例では、そのサービスプロバイダで、テーブルのデータをすべてのビューで共有して利用します。

また、データベースのテーブルと、そのテーブルのモデルは、すでに作成してある前提としています。

サービスプロバイダーでviewとモデルを利用しテーブルのデータを共有

以下、サービスプロバイダーに追加するコードの例となります。

例では、デフォルトで用意されているサービスプロバイダーのAppServiceProviderを利用し、モデル名Exampleから取得したデータを、viewのヘルパー関数ですべてのビューに渡しています。

また、サービスプロバイダーのファイルは、app/Providers内にあります。

<?php

namespace AppProviders;

use IlluminateSupportServiceProvider;

// 利用するモデルをインポート
use AppExample;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // すべてのビューにモデルで取得したデータを渡す
        $result = Example::get();
        view()->share('examples', $result);
    }
}

AppServiceProviderに追加したコードは以下となります。

利用するモデルをインポート

ソースコードの8行目で、利用するモデルをインポートしています。

モデルで取得したデータをすべてのビューで共有

ソースコードの30行目からのboot()メソッドに、以下の処理を追記しています。

まず、Eloquentモデルのget()メソッドで、テーブルの全レコードをコレクション(配列のラッパー)として取得しています。

そして、viewのヘルパー関数のshare()メソッドで、取得したテーブルのデータをすべてのビューで共有しています。

また、share()メソッドの第1引数にはビューで利用する際の変数名を指定し、第2引数に共有するデータを指定します。

参考サイトなど

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

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。