larave-admin のレイアウトカスタマイズ

larave-admin を使っていてフッターやログイン画面などのレイアウト(viewテンプレート)を変更したい場合はどうすれば良いでしょう。laravel-adminのレイアウトはvendor配下(例えばログイン画面であれば vendor/encore/laravel-admin/resources/views/login.blade.php)にあります。vendor 以下のファイルは基本的には修正不可(修正しても更新で上書きされる)でプロジェクトでバージョン管理すべきではありませんので、Viewテンプレートのコピーを作成し、そのコピーをプロジェクト管理に入れた上で、プロジェクト管理にあるテンプレートを更新していくことになります。

テンプレートファイルのコピー先としては laravel プロジェクトディレクトリの resources/views/laravel-admin が定石となっています。その場合は laravel プロジェクトディレクトリで次のコピーコマンドを打つことでコピーできます。

また、app/Admin/bootstrap.php に次の一行を加えます

app('view')->prependNamespace('admin',resource_path('views/laravel-admin'));

このコードは app ヘルパーを使用して View インスタンスを取り出し、FileViewFinder の prependNamespace により、 admin というネームスペースに対して先ほどコピーしたテンプレートファイルを参照するように指示しています。

https://laravel.com/api/7.x/Illuminate/View/FileViewFinder.html#method_prependNamespace

もう少し厳密に説明すると、まずLaravelのViewサービスは、下記のようなサービスプロバイダーの一つである、ViewServicePorvider により提供されています

サービスプロバイダの概念:
https://readouble.com/laravel/8.x/ja/providers.html

ViewServiceProviderの実装:
https://github.com/illuminate/view/blob/9a75f99dfe24e2a69888bbc61a26b86b667e3702/ViewServiceProvider.php#L12

この ViewServiceProvider はViewファイルを検索する際に内部から FileViewFinder を参照しており、そのFileViewFinder にadminネームスペースと resources/views/laravel-admin を結びつけるヒントを与えておくことで、laravel-admin から参照するテンプレートファイルの参照元が resources/views/laravel-admin に変更される、というわけです。