laravel5のサイドバーで毎回同じ情報を表示するには、各ControllerではなくAppServiceProvider.phpのbootに処理を記述する事!
過去記事だと、独自ServiceProviderファイルを作っていたけど、大した処理でなければ最初からあるAppServiceProvider.phpで十分(複雑になってきてから分離してもいいし)
laravel5.1で、サイドバーにMySQLのレコード(カテゴリーなど)を常に表示するには、view composer(サービスプロバイダ)を使えば良い。
全ての画面表示処理にサイドバーの情報を渡すのも大変だし、追加や変更も考えると一箇所に記述すべき!
既存ソースを見たら、色々なコントローラーでサイドバー処理がコピペされ、同じ値を延々と吐き出されていた…。
Don’t Repeat Yourself(同じ処理は書くな!)
Once and Only Once(記述は一箇所に!)
の原則って大切だよね…。
AppServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App; // サイドバーに表示するクラスをuseしておく事! use App\なんたらテーブルのクラス名; class AppServiceProvider extends ServiceProvider { public function boot() { // 特定のbladeファイルを指定する // 引き渡したい変数名と値をセットしておくと、Controllerから渡さなくてもblade上で使える! view()->composer('include.sidebar', function($view) { $view->with('bladeで使う変数名', なんたらテーブルのクラス名::get何かの値()); }); // 全bladeファイルで使いたい時は、こうする //view()->share('bladeで使う変数名', なんたらテーブルのクラス名::get何かの値()); } public function register() { // } } |