12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

laravelで400番台以外のエラーを500ページで表示

Last updated at Posted at 2017-06-06

自己紹介

  • Qiita初投稿です。
  • php歴は約7年
  • laravel歴は3ヶ月

前提

  • errorsフォルダに500に該当する画面を用意している(例:500.blade.php)
  • 400番台以外のエラーは500ページを表示したい方

経緯

  • 予期せぬエラーは500ページとしてまとめたかった。

カスタマイズ

app\Exceptions\Handler.phpを修正

これは他でも紹介されている通り、Handler.phpのrenderを修正します。

Handler.php
public function render($request, Exception $exception)
    {
        // 403,404などのHTTPエラー以外はerrors/500画面表示
        if (!$this->isHttpException($exception)) {
            return response()->view("errors.500");
        }
        
        return parent::render($request, $exception);
    }

と、これで完成かと思ったら、
これも他でも紹介されているように
バリデーションエラーになった時にも500ページが。。。
バリデーションエラーまでも500ページにはしたくない。

app\Exceptions\Handler.phpを再修正

調べた結果、ValidationExceptionとなっていたものの、
namespaceで「\Illuminate\Validation\ValidationException」
となってました。

なので、下記のように修正しました。

Handler.php
public function render($request, Exception $exception)
    {
        // 403,404などのHTTPエラー, バリデーションエラー以外はerrors/500ページ表示
        if (!$this->isHttpException($exception)
            &&
            !$exception instanceof \Illuminate\Validation\ValidationException
            ) {
            return response()->view("errors.500");
        }
        
        return parent::render($request, $exception);    
    }

最後に

バリデーションエラーが500ページとなったので、どこかでコケたのかと思いましたが、
わかってみれば、なんてこともないことでした。

他にもこんなやり方があるよ、
そのやり方はよくないよ
などあれば、ぜひ教えて頂けると助かります。

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?