Error handler

Last updated: Mon, 07 Jun 2021 22:39

You can personalize errors pages with an error handler. Also, you can define an error handler by status code.

Error handler

Error handler is a class whose implements \Berlioz\Http\Core\Http\Handler\Error\ErrorHandlerInterface interface.

use Berlioz\Http\Core\Http\Handler\Error\ErrorHandlerInterface;
use Berlioz\Http\Message\Response;

class MyHttpErrorHandler implements ErrorHandlerInterface
{
    /**
     * @inheritDoc
     */
    public function handle(ServerRequestInterface $request, ?Throwable $throwable = null): ResponseInterface
    {
        // ...

        return new Response(statusCode: 500);
    }
}

If you want use the template rendering engine or access to core functionalities, you need to extend \Berlioz\Http\Core\Controller\AbstractController class.

use Berlioz\Http\Core\Controller\AbstractController;
use Berlioz\Http\Core\Http\Handler\Error\ErrorHandlerInterface;

class MyHttpErrorHandler extends AbstractController implements ErrorHandlerInterface
{
    /**
     * @inheritDoc
     */
    public function handle(ServerRequestInterface $request, ?Throwable $throwable = null): ResponseInterface
    {
        // ...

        return $this->response($this->render('error.html.twig'));
    }
}

Configuration

Your error handler must be declared in your configuration file like this:

{
  "berlioz": {
    "http": {
      "errors": {
        "default": "App\\Http\\MyHttpErrorHandler"
      }
    }
  }
}

The key default, it's for all errors attempted if no other handler is declared. So you can declare others handlers for specific http errors, like 500 errors:

{
  "berlioz": {
    "http": {
      "errors": {
        "default": "App\\Http\\MyHttpErrorHandler",
        "500": "App\\Http\\InternalHttpErrorHandler"
      }
    }
  }
}