Skip to content

Instantly share code, notes, and snippets.

@nazo
Created May 18, 2015 04:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nazo/d206a8170a075038442c to your computer and use it in GitHub Desktop.
Save nazo/d206a8170a075038442c to your computer and use it in GitHub Desktop.
[php][laravel5]全てのエラーで任意のエラーページを出力する

500エラーなら500.blade.php出してくれると思った?残念でした!HttpExceptionを継承してないと本番でもSymfonyのエラー画面になります!

本番でSymfonyのエラー画面出したい奴なんていないだろ…何考えてるんだよ…というわけでapp/Exceptions/Handler.phpを書き換える。

use Symfony\Component\HttpKernel\Exception\HttpException;

...

    public function render($request, Exception $e)
    {
        if (config('app.debug')) {
            return parent::render($request, $e);
        }

        if ($this->isHttpException($e)) {
            return $this->renderHttpException($e);
        } else {
            return $this->renderHttpException(new HttpException(500, $e->getMessage(), $e));
        }
    }

これで問答無用で500エラーになる。404のほうが良ければ404にすればいいし、例外に応じて出し分けたかったらここをカスタマイズすれば良い。

@atsumori
Copy link

atsumori commented Jul 9, 2015

ありがとうございます!

@zaqu
Copy link

zaqu commented Oct 20, 2015

参考にさせていただきました。
ありがとうございます。

1点だけ気になったのですが、ご教授いただいた内容ですと、スタックトレースのログが出力されなくなり、以下のソースを追加しました。
「\Log::error($e->getTraceAsString());」

最終的にこんな感じに↓

    if (config('app.debug')) {
        return parent::render($request, $e);
    }
    if ($this->isHttpException($e)) {
        return $this->renderHttpException($e);
    } else {
        \Log::error($e->getTraceAsString());
        return $this->renderHttpException(new HttpException(500, $e->getMessage(), $e));
    }

この修正は私の知識不足からくるものなのか気になりまして、もし宜しければご教授お願いいたします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment