どうやって共有するか
Laravelが用意してくれているview()->share('変数名', '入れたい値')
を使用することで
簡単に共通変数を設定可能
view()->share()をどこで呼び出す?
Middlewareを作ったりいろんな方法があるけど、
さくっと作りたかったのでapp/Providers/AppServiceProvider.php
で設定した
共通変数に文字列を設定してみる
- app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$commonValue = '共通で使用したい値'; // ⭐️ 追加
view()->share('commonValue', $commonValue); // ⭐️ 追加
}
}
これで、どのviewでも$commonValue
変数が使用できるようになった
共通変数にテーブルの取得情報を設定してみる
例えばcategories
テーブルの値を設定したい場合
- app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Models\Category; // ⭐️ 追加
use Illuminate\Support\Facades\Schema; // ⭐️ 追加
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @param UrlGenerator $url
* @return void
*/
public function boot(UrlGenerator $url)
{
// ⭐️ 追加
if (Schema::hasTable('categories')) {
$categories = Category::all();
view()->share('categories', $categories);
}
}
}
これでどのviewでも$categories
が使用できる
解説
AppServiceProviderのboot
メソッドは、アプリケーションの初期起動時に呼び出される
そのためここにview()->share()
を書いてあげると、
全Viewで変数が使用可能になる
※上記のようにテーブルを使用する場合は、migration前だとエラーが出てしまうのでif (Schema::hasTable('categories')) {}
でテーブルが存在する場合のみ実行するようにしている
複雑な処理とかをしたい場合は専用のサービスプロバイダを作る方が良き
使ってみる
\ Controllerから渡すのと同じ要領で使用できる /
@foreach ($categories as $category)
{{ $category->name }}
@endforeach
カテゴリ情報やマスタ情報のような、複数のviewで繰り返し使用したい変数は
view()->share()
でシェアしてあげる