phphd/exception-toolkit

Exception processing toolkit

Installs: 1 183

Dependents: 2

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

Type:symfony-bundle

1.0.1 2024-09-28 12:52 UTC

This package is auto-updated.

Last update: 2024-10-28 13:01:30 UTC


README

🧰 Provides a set of tools to handle exceptions in PHP applications.

Build Status Codecov Packagist Downloads Licence

Installation 📥

  1. Install via composer

    composer require phphd/exception-toolkit
  2. In case you are using symfony, enable the bundle in the bundles.php

    PhPhD\ExceptionToolkit\Bundle\PhdExceptionToolkitBundle::class => ['all' => true],

Provided tools ⚙️

Exception Unwrapper

Allows you to unwrap composite exceptions and get the atomic errors you are interested in:

use PhPhD\ExceptionToolkit\Unwrapper\ExceptionUnwrapper;

/** @var ExceptionUnwrapper $unwrapper */
$unwrapper = getUnwrapper(); 

$compositeException = new CompositeException([
    new InvalidEmailException(),
    new CompositeException([
        new InvalidPasswordException(),
    ]),
]);

[$emailError, $passwordError] = $unwrapper->unwrap($compositeException);

In this example, errors were retrieved from composite exceptions: $emailError will be an instance of InvalidEmailException and $passwordError will be an instance of InvalidPasswordException that were wrapped in the composite exception.

Symfony integration

In symfony application you could use ExceptionUnwrapper service:

public function __construct(
    #[Autowire('@phd_exception_toolkit.exception_unwrapper')] 
    private ExceptionUnwrapper $exceptionUnwrapper,
) {}

This will provide you with full stack of defined unwrappers bundled into a single instance.

If you want to define custom unwrapper, you should decorate phd_exception_toolkit.exception_unwrapper.stack service.

Built-in unwrappers

Messenger

If you are using symfony messenger, Symfony\Component\Messenger\Exception\WrappedExceptionsInterface will be unwrapped automatically.

Amp

If you are using Amp, Amp\CompositeException will be unwrapped automatically.