Laravel 6 で各テンプレートに共通の変数を渡す方法

Laravel 6 で Controller からテンプレートに変数を渡す際には、下記のように view() の第二引数に指定することで実現できます。

app/Http/Controllers/SampleController.php
public function index()
{
  return view('sample.index', ['message' => 'From Controller']);
}
resources/views/sample/index.blade.php
<body>
  {{ $message }}
</body>

Webシステムの開発をしていると、全画面に共通の変数を渡したい場合があります。 上記方法だと、画面ごとに設定を書く必要があるため非効率的です。

そのような場合には、下記のように AppServiceProvider.php の boot() の中に追記すればOKです。

app/Providers/AppServiceProvider.php
<?php
...
use Illuminate\Support\Facades\View; // ←追加
...
  public function boot()
  {
    // ▼下記3行を追加
    View::composer('*', function($view) {
      $view->with('message', 'From Provider');
    });
  }
...

Laravel 5.8 でも上記コードで動きます。

Laravel 6 からナンバリングのルールが変わったようで、メジャーバージョンアップに見えて、実は 5.9 の立ち位置みたいですね。