もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

Laravelのエラーページのディレクトリをデフォルトの場所から変えたい

はじめに

こんばんは。

Laravelで404とか500とかのエラーページを修正したいとかってあると思います。

今回はそれで、デフォルトのディレクトリ以外の場所の指定をしたい場合の備忘録です。

本題

だいたい、こちらカスタムHTTPエラーページ とかを参照して、エラーページをカスタマイズしていくと思います。

ただ、レポジトリが一緒でadmin用、front用みたいに2サイト分の情報が入っているプロジェクトの場合、テンプレートも分けないといけません。

だいたい resources/views のしたに admin customer みたいな感じでさらにディレクトリを掘ると思います。

しかしこれだと エラーページをカスタマイズしたいとなった場合、そのままでどちらも同じものを使うことになります。

それは、 エラーページが resources/views/errors/ を参照するようになっているからです。

これを回避する方法は、 app/Exceptions/Handler.php をカスタムする必要があります。

といっても 継承しているクラスから、 registerErrorViewPaths() メソッドをオーバライドするだけです。

僕の場合は以下のような感じで対応してます。

<?php
    /**
     * Register the error template hint paths.
     *
     * @return void
     */
    protected function registerErrorViewPaths()
    {
        $paths = collect(config('view.paths'));

        View::replaceNamespace('errors', $paths->map(function ($path) {
            if (config('app.project') === 'admin') {
              $path .= '/admin';
            } elseif (config('app.project') === 'customer') {
              $path .= '/customer';
            }

            return "{$path}/errors";
        })->push(__DIR__ . '/views')->all());
    }

終わりに

そういえば仕事がもしかしたら途切れるかもしれません。

お仕事ください。

現場からは以上です。