こんにちは。テダスクのToshiです!
今日は、このサイトでは初めて、PHPフレームワークのLaravelについての記事を書きます。
このサイトを見に来ている方は恐らくサービスプロバイダーがどういうものなのかが分かっていて調べているかとは思うのですが、例を挙げて説明すると、ブログのサイドバーで新着記事とかカテゴリー一覧とか表示する場合、Viewごとにコントローラーに毎回新着記事の取得とカテゴリー一覧の取得をしなければなりませんよね。
それって、同じ処理を繰り返し記述しているという、DRY原則に反するわけですね。
それを防ぐための仕組みで、このサービスプロバイダーを利用する事で、一箇所に処理を纏める事が出来ます。
で、使い方についてはこちらを参考にさせていただきました。
laravel5のサイドバーで毎回同じ情報を表示するには、各ControllerではなくAppServiceProvider.phpのbootに処理を記述する事!
このサイトでは、新たにサービスプロバイダーを作るのではなく、既存のAppServiceProvider.phpを利用するので十分という点が特に良いなと思いました。
この記事の中では
public function boot()
{
// 特定のbladeファイルを指定する
// 引き渡したい変数名と値をセットしておくと、Controllerから渡さなくてもblade上で使える!
view()->composer(‘include.sidebar’, function($view) {
$view->with(‘bladeで使う変数名’, なんたらテーブルのクラス名::get何かの値());
});// 全bladeファイルで使いたい時は、こうする
//view()->share(‘bladeで使う変数名’, なんたらテーブルのクラス名::get何かの値());}
参考:laravel5のサイドバーで毎回同じ情報を表示するには、各ControllerではなくAppServiceProvider.phpのbootに処理を記述する事!
と書いてあって、表示するviewのテンプレートがinclude.sidebarというところなのですが、私の場合、使用するViewファイルを複数指定したくて色々試したのですが、こうすると、複数のViewファイルで読み込めるようになります。
appProvidersAppServiceProvider.php
View::composer(['index','post.detail','post.category','news.index','news.detail'], function ($view) { … $view->with('ads',$ads) ->with('recommends',$recommends) ->with('populars',$populars); });
View::composer()の中に、配列でカンマで区切ると指定した各ビューでサービスプロバイダーが利用出来るようになります。
因みに、参考にさせていただいたサイトのLaravelのバージョンは5.1のもののようですが、現在の最新の5.6でも問題なく動いています。
以上、laravelのサービスプロバイダーを複数のビューで利用する方法でした。
こちらの記事もおすすめです☆
コメント