Laravel 5.0 - Custom Error Pages

Posted on February 01, 2015 | By Matt Stauffer


Warning: This post is over a year old. I don't always update old posts with new information, so some of this information may be out of date.

When you wanted to customize your error pages—for example, showing a particular cat GIF when your users hit a 404—you’d Google it and follow these instructions by Dries Vints.

In Laravel 5 things have changed a bit. TL;DR take me to the solution already

Trace it through the code

Now, all custom error and exception handling has moved to app/Exceptions/Handler.php. You’ll remember that that’s where we went to bring Whoops back.

You’ll notice, however, that it does this by default:

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $e
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $e)
    {
        if ($this->isHttpException($e))
        {
            return $this->renderHttpException($e);
        }
        else
        {
            return parent::render($request, $e);
        }
    }

For all HTTP Exceptions (like 404s and 503s), it uses the renderHttpException() method, which isn’t defined in this file. So, we check its parent, \Illuminate\Foundation\Exceptions\Handler, where we can find the renderHttpException() method:

    /**
     * Render the given HttpException.
     *
     * @param  \Symfony\Component\HttpKernel\Exception\HttpException  $e
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected function renderHttpException(HttpException $e)
    {
        if (view()->exists('errors.'.$e->getStatusCode()))
        {
            return response()->view('errors.'.$e->getStatusCode(), [], $e->getStatusCode());
        }
        else
        {
            return (new SymfonyDisplayer(config('app.debug')))->createResponse($e);
        }
    }

So, if the view exists for "errors.{httpStatusCode}", it'll display it (and pass along a little bit of information).

How ya do it

So, if we have a view file accessible at “errors.{errorStatusCode}”, it’ll automatically display for that status code.

So that means customizing your 404 error page is as simple as adding a view at resources/views/errors/404.blade.php. Done!


Comments? I'm @stauffermatt on Twitter


Tags: laravel  •  laravel 5