Laravel 5.0 - Custom Error Pages

Posted on February 01, 2015

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


This is part of a series of posts on New Features in Laravel 5.0:

  1. Sep 10, 2014 | laravel, 5.0, laravel 5
  2. Sep 10, 2014 | laravel, 5.0, laravel 5
  3. Sep 12, 2014 | laravel, laravel 5, 5.0
  4. Sep 20, 2014 | laravel, 5.0, laravel 5
  5. Sep 28, 2014 | laravel, laravel 5, 5.0
  6. Sep 30, 2014 | laravel, 5.0, laravel 5
  7. Oct 9, 2014 | laravel, 5.0, laravel 5
  8. Oct 10, 2014 | laravel, 5.0, laravel 5
  9. Oct 10, 2014 | laravel, 5.0, laravel 5
  10. Nov 20, 2014 | laravel, 5.0, laravel 5
  11. Jan 2, 2015 | laravel, 5.0, commands, laravel 5
  12. Jan 16, 2015 | laravel, laravel 5
  13. Jan 19, 2015 | laravel 5, laravel
  14. Jan 21, 2015 | laravel, events, 5.0, laravel 5
  15. Jan 26, 2015 | laravel, laravel 5
  16. Feb 1, 2015 | laravel, laravel 5
  17. Feb 14, 2015 | laravel 5, laravel, eloquent

Subscribe

For quick links to fresh content, and more thoughts that don't make it to the blog