0 follower

Final Class Yiisoft\ErrorHandler\ErrorHandler

InheritanceYiisoft\ErrorHandler\ErrorHandler

ErrorHandler handles out of memory errors, fatals, warnings, notices and exceptions.

Public Methods

Hide inherited methods

Method Description Defined By
__construct() Yiisoft\ErrorHandler\ErrorHandler
debug() Enables and disables debug mode. Yiisoft\ErrorHandler\ErrorHandler
handle() Handles throwable and returns error data. Yiisoft\ErrorHandler\ErrorHandler
memoryReserveSize() Sets the size of the reserved memory. Yiisoft\ErrorHandler\ErrorHandler
register() Register PHP exception and error handlers and enable this error handler. Yiisoft\ErrorHandler\ErrorHandler
unregister() Disable this error handler. Yiisoft\ErrorHandler\ErrorHandler

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( \Psr\Log\LoggerInterface $logger, Yiisoft\ErrorHandler\ThrowableRendererInterface $defaultRenderer, \Psr\EventDispatcher\EventDispatcherInterface|null $eventDispatcher null, integer $exitShutdownHandlerDepth 2 )
$logger \Psr\Log\LoggerInterface

Logger to write errors to.

$defaultRenderer Yiisoft\ErrorHandler\ThrowableRendererInterface

Default throwable renderer.

$eventDispatcher \Psr\EventDispatcher\EventDispatcherInterface|null

Event dispatcher for error events.

$exitShutdownHandlerDepth integer

Depth of the exit() shutdown handler to ensure it's executed last.

                public function __construct(
    private readonly LoggerInterface $logger,
    private readonly ThrowableRendererInterface $defaultRenderer,
    private readonly ?EventDispatcherInterface $eventDispatcher = null,
    private readonly int $exitShutdownHandlerDepth = 2
) {
}

            
debug() public method

Enables and disables debug mode.

Ensure that is is disabled in production environment since debug mode exposes sensitive details.

public void debug ( boolean $enable true )
$enable boolean

Enable/disable debugging mode.

                public function debug(bool $enable = true): void
{
    $this->debug = $enable;
}

            
handle() public method

Handles throwable and returns error data.

public Yiisoft\ErrorHandler\ErrorData handle ( Throwable $t, Yiisoft\ErrorHandler\ThrowableRendererInterface|null $renderer null, \Psr\Http\Message\ServerRequestInterface|null $request null )
$t Throwable
$renderer Yiisoft\ErrorHandler\ThrowableRendererInterface|null
$request \Psr\Http\Message\ServerRequestInterface|null

                public function handle(
    Throwable $t,
    ?ThrowableRendererInterface $renderer = null,
    ?ServerRequestInterface $request = null
): ErrorData {
    $renderer ??= $this->defaultRenderer;
    try {
        $this->logger->error($t->getMessage(), ['throwable' => $t]);
        return $this->debug ? $renderer->renderVerbose($t, $request) : $renderer->render($t, $request);
    } catch (Throwable $t) {
        return new ErrorData((string) $t);
    }
}

            
memoryReserveSize() public method

Sets the size of the reserved memory.

public void memoryReserveSize ( integer $size )
$size integer

The size of the reserved memory.

                public function memoryReserveSize(int $size): void
{
    $this->memoryReserveSize = $size;
}

            
register() public method

Register PHP exception and error handlers and enable this error handler.

public void register ( )

                public function register(): void
{
    if ($this->enabled) {
        return;
    }
    if ($this->memoryReserveSize > 0) {
        $this->memoryReserve = str_repeat('x', $this->memoryReserveSize);
    }
    $this->initializeOnce();
    // Handles throwable that isn't caught otherwise, echo output and exit.
    set_exception_handler(function (Throwable $t): void {
        if (!$this->enabled) {
            return;
        }
        $this->renderThrowableAndTerminate($t);
    });
    // Handles PHP execution errors such as warnings and notices.
    set_error_handler(function (int $severity, string $message, string $file, int $line): bool {
        if (!$this->enabled) {
            return false;
        }
        if (!(error_reporting() & $severity)) {
            // This error code is not included in error_reporting.
            return true;
        }
        $backtrace = debug_backtrace(0);
        if (isset($backtrace[0]['file'])) {
            unset($backtrace[0]['function'], $backtrace[0]['class'], $backtrace[0]['type'], $backtrace[0]['args']);
        } else {
            array_shift($backtrace);
        }
        throw new ErrorException($message, $severity, $severity, $file, $line, null, $backtrace);
    });
    $this->enabled = true;
}

            
unregister() public method

Disable this error handler.

public void unregister ( )

                public function unregister(): void
{
    if (!$this->enabled) {
        return;
    }
    $this->memoryReserve = '';
    $this->enabled = false;
}