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に対してのみ作用するようにコーディングできるコールバック関数として利用することが出来ます。