Laravelでエラーページを共通化して40xや50xのエラーメッセージを表示

laravel-custom-errors-page
  • URLをコピーしました!

Laravelエラーページをカスタマイズしようと思って調べてみると、resources/views/errorsフォルダに40xや50xのHTTPエラーステータスコード毎にファイルを作れと書いてある。
表示されるエラーはほとんど場合決まってはいるものの、複数に対応するのはとても面倒なので、LaravelBladeテンプレートを使ってエラーページ共通化することにしました。

目次

エラーページの設置場所

Laravelでは、どのようなページでもお決まりの[resources/views]以下に保存されていますが、エラーページも例外ではありません。
通常はこのように、ステータスコード毎にエラーページも増えていきます。

これではエラーページが増えすぎて、管理が複雑になってしまうので、この1つのエラーページで済むように共通化します。

エラーメッセージを作成する

まずは、各エラーページに必要なエラーメッセージ共通のファイルに作成します。
以前、バリデーションメッセージファイルなどを日本語化しましたが、同じ要領でHTTPエラーのステータスコード毎にメッセージを作成します。

まずは、こちらのサイトを参考にエラーメッセージファイルを作りました。

できたものはGitHubに置いていますので、ご自由にお使いください。

GitHub
GitHub - minoryorg/laravel-http-errors: HTTPエラーのステータスコードに対応したメッセージファイル HTTPエラーのステータスコードに対応したメッセージファイル. Contribute to minoryorg/laravel-http-errors development by creating an account on GitHub.

共通ページへ遷移させる

次にステータスコードから上記で作成したメッセージを取得し、共通ページへ遷移させます。
変更するのは、Handler.phprender()関数内のみです。

app/Exceptions/Handler.php

解説と注意点

ちょっとハマったところですが、HttpExceptionで判定しておかないとログインエラーなども拾ってしまってgetStatusCode()で落ちるので、必ず$this->isHttpException($exception)で判定しておいてください。getStatusCode()ステータスコードを取得できます。
__()のヘルパー関数を使って上記で作成したメッセージを取得し、ステータスコードと一緒に$errors変数に入れ、compact('errors')共通エラーページBlade)に渡します。

共通のエラーページを表示

共通エラーページを作成して、上記で渡されたエラーメッセージを表示します。

resources/views/errors.blade.php

解説とポイント

$errors配列に入れたエラーメッセージを表示しています。
ステータスコードによって40x系を黄色、50x系とそれ以外を赤色で色分けしています。
こんな感じ。

laravel-error-page
laravel-error-page
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次