Laravel viewに共通変数を使いたいが中身を画面に応じて変えたい
Qiita投稿 #30
今回は・・・
Laravelのビューコンポーザを使用した時の備忘録です。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
class SampleServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*
*/
public function register()
{
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
View::composer(['Sample1','Sample2','Sample3'],'App\Http\ViewComposers\SampleComposer');
}
}
php artisan make:provider SampleServiceProvider
上記でプロバイダを作成しbootメソッド内にviewを指定します。
Sample1,2,3には同じ変数を使用するが中身は変えたいという場合を想定し、SampleComposerで条件分岐させます。
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
class NamingComposer
{
// 省略
public function compose(View $view)
{
// 画面に応じて分岐
switch($view->name()){
case 'Sample1':
$view->with('success','サンプル1です');
break;
case 'Sample2':
$view->with('success','サンプル2です');
break;
case 'Sample3':
$view->with('success','サンプル3です');
break;
default:
break;
}
}
}
laravelで用意されているViewクラスのメソッドを使う場合view()
もしくはview->with()
で画面や変数指定をする機会が多いと思います。
日本語記事でこれ以外のメソッドが紹介されているのはあまり見かけませんが、laravel APIドキュメントを見ると様々なメソッドが用意されています。
view->name()
view->name()
は現在のviewの名前を取得します。
今回はこちらのメソッドを使用しSampleComposer内で画面名に応じて処理を書いていきます。
またサービスコンテナに共通ロジックを書いておくことで、「依存度が下がる」「複数のファイルに同じコードを書かなくて済む」「修正する際は1つのファイルのみで済む」「可読性が上がる」など様々なメリットがあります。composerでも独自のサービスコンテナを使用することができますので、積極的にサービスコンテナとビューコンポーザを使っていきたいですね。一人でアプリケーションを作成する時は気にする必要はあまりないですが、チームで開発するときは「共通項はまとめる」という意識が重要かと思います。
参考
Author And Source
この問題について(Laravel viewに共通変数を使いたいが中身を画面に応じて変えたい), 我々は、より多くの情報をここで見つけました https://qiita.com/taaachezi/items/d11d75abc1f6fabef2fa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .