hgh / exception-handler
This package centralizes exceptions behaviour of projects. The duty of this package is to prevent to show unwanted exceptions to user.
Requires
- hgh/helpers: ^1.0
This package is auto-updated.
Last update: 2024-12-15 06:02:01 UTC
README
This package centralizes exceptions behaviour of projects. The duty of this package is to prevent to show unwanted exceptions to user. Actually sometimes you want some exceptions to be shown in output too. This package will handle both sides. All exceptions can use the predefined interfaces.
Table of contents
Installation
To install this package, require it via the composer.
composer require hgh/exception-handler
Interfaces
There are 11 interfaces that exceptions can be implemented. The exceptions that are implemented from these interfaces will be log in the files by their type.
How to use
Exception handling
First as a sample we define an exception class.
/** * Class SampleException */ class SampleException extends BaseException implements ShouldPublish, ErrorInterface { } $exception = new SampleException("SampleException");
You can use exception handler directly.
$exceptionHandler = new ExceptionHandler($exception); $exception = $exceptionHandler->handle(); // The result will be SampleException class
Or use facade:
\HGh\Handlers\Exception\Facades\Exception::handle($exception); // The result will be SampleException class
As you can see, the result of exception handling is the same exception, because it implements from ShouldPublish
interface.
Let's define another exception to see another type of exception handling:
/** * Class AnotherSampleException */ class AnotherSampleException extends BaseException implements WarningInterface { } $exception = new AnotherSampleException("AnotherSampleException"); $exception = \HGh\Handlers\Exception\Facades\Exception::handle($exception); // The result will UnexpectedException
See, the result of exception handling is not the same. It is UnexpectedException
because it doesn't implement the ShouldPublish
interface.
Exception Logging
Another class exists here to log the exceptions. First before ExceptionHandler
change the type of exception, log the exception, then handle it by ExceptionHanlder
.
Let's define an exception.
/** * Class SampleException */ class SampleException extends BaseException implements ShouldPublish, ErrorInterface { } $exception = new SampleException("SampleException");
Now it's the turn of the logger. You can use the direct service as below:
use HGh\Handlers\Exception\Services\ExceptionLogger;$filePath = "/tmp/logs"; $exceptionLogger = new ExceptionLogger($filePath); $exceptionLogger->log($exception);
or use the facade:
\HGh\Handlers\Exception\Facades\Exception::log($exception, $filePath);
then handle it and pass it to output. Basically it's better to extend the facade of package and define your own fileWriter to prevent defining the fileWriter each time.
/** * This class is a facade to all exception actions * PHP version >= 7.0 * * @category Facades * @package ExceptionHandler * @author Hamed Ghasempour <hamedghasempour@gmail.com> * @license MIT https://opensource.org/licenses/MIT * @link null */ class Exception extends ExceptionFacade { /** * This method will log an exception * * @param Throwable $throwable The throwable * @param string $filePath The file path that throwable should be log into * * @return void */ public static function log(Throwable $throwable, string $filePath = null) { if (empty($filePath)) { $filePath = "/tmp/logs"; } parent::log($throwable, $filePath); } }
By this way, before changing the exception by exception handler, you log every exception, and you will never miss them and on the other side, after handling the exceptions, you will never show to the user unwanted exceptions.