Converting Errors to Exceptions

Mascot catches exceptions that are thrown from within a request/response cycle. However, it does not catch PHP errors and notices. This recipe tells you how to catch them by converting them to exceptions.

Registering the ErrorHandler

The Symfony/Debug package has an ErrorHandler class that solves this problem. It converts all errors to exceptions, and exceptions are then caught by Mascot.

Register it by calling the static register method:

use Symfony\Component\Debug\ErrorHandler;

ErrorHandler::register();

It is recommended that you do this as early as possible.

Handling fatal errors

To handle fatal errors, you can additionally register a global ExceptionHandler:

use Symfony\Component\Debug\ExceptionHandler;

ExceptionHandler::register();

In production you may want to disable the debug output by passing false as the $debug argument:

use Symfony\Component\Debug\ExceptionHandler;

ExceptionHandler::register(false);

Note

Important caveat when using Mascot on a command-line interface: The ExceptionHandler should not be enabled as it would convert an error to HTML output and return a non-zero exit code:

use Symfony\Component\Debug\ExceptionHandler;

if (!in_array(PHP_SAPI, ['cli', 'phpdbg'])) {
    ExceptionHandler::register();
}