☝️
LaravelのBlade間で共通の変数を使う
Laravelを使ってて、HTMLのパーツをViewのBladeファイルで使いまわしたいときありますよね。
例えば、メニューの項目やカテゴリー項目をヘッダーとフッターで使いたいとか。
header.blade.phpとfooter.blade.phpに分かれてて、layout.blade.phpで読み込んでるよと言った場合、面倒なので同じものを呼び出すときは、全部のbladeで同じ変数使いたいってなると思うんです。
そういう時に使うのが共通変数です。
色々方法はありますが、とりあえず簡単な方法で設定します。
ServiceProviderで設定
今回はデータベースのconfigsテーブルに登録されているサイトの各種データを呼び出すという前提で設定します。
共通変数名はsiteにしました。
app/Providers/AppServiceProvider.php
namespace App\Providers;
use App\Models\Config;
use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Paginator::defaultView('default');
if (Schema::hasTable('configs')) {
$site = Config::latest()->first();
if (!$site) {
$site = new Config();
}
view()->share('site', $site);
}
}
}
Schema::hasTable() でテーブルが存在したらというif文を入れるのを忘れずに。
初期状態でテーブルができてないときにエラーになります。
viewで、{{ $site->site_name }} と呼び出すと、configsテーブルのsite_nameカラムの値が呼び出されます。
どのviewからでも使用できます。
ただ共通変数が増えると、ごちゃごちゃになりがちなので、その場合は専用のComposerとサービスプロバイダを別途作成するのをおすすめします。
Discussion