Laravel サイト全体で共有するデータをViewにセットする

View::composerとView::share

サイト全体で利用するカテゴリデータのセット処理を統一的にコーディングする

サイト内のすべてのページで利用するデータとしてカテゴリー情報があります。

ページの共通ヘッダにカテゴリーツリーが表示する場合などがあげられます。共通のデータをViewにセットするコードを毎回コーディングするのではなく、統一的に記述するとメンテナンスが容易になります。

Laravelでは、View::composer, View::shareを使って統一的にViewにデータを渡すことが可能です。

View::composer

View::composerを利用してWebサイト全体で共有するデータをViewにセットすることが出来ます。

View::composerの最初の引数を*(アスタリスク)に設定することで、すべてのViewにデータを渡すコードを書くことが出来ます。

View::composer('*', function($view)
{
  $category = Category::all();
  $view->with('category', $category);
});

上のコードを

  • app/routes.php
  • app/filters.php

に記述してViewにデータをセットすることが出来た。

View::share

Laravelのベースコントローラに共通処理をコーディングすることも可能です。その場合にはコンストラクタを利用します。

public function __construct() {
  $category = Category::all();
  View::share('category', $category);
}

ベースコントローラとView::shareを使ってWebサイト全体でシェアするデータ(カテゴリーデータ)をViewにセットすることが出来ます。

双方の違い

View::shareの場合はサイト全体で利用可能なView側のグローバル変数を設定可能で、View::composerでは、特定のViewに対してのみ作用するようにコーディングできるコールバック関数として利用することが出来ます。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Laravel サイト全体で共有するデータをViewにセットするの記事にコメントを投稿