namespace Gsousadev\LaravelProblemDetailExceptions\Enums;
enum ExceptionsFieldsEnum: string
{
case TYPE = 'type';
case TITLE = 'title';
case STATUS = 'status';
case DETAIL = 'detail';
case INTERNAL_CODE = 'internal_code';
case MESSAGE = 'message';
case USER_MESSAGE = 'user_message';
case USER_TITLE = 'user_title';
case LOCATION = 'location';
case TRACE_ID = 'trace_id';
case PREVIOUS_MESSAGE = 'previous_message';
case PREVIOUS_TYPE = 'previous_type';
case PREVIOUS_CODE = 'previous_code';
case PREVIOUS_LOCATION = 'previous_location';
}
...
use Gsousadev\LaravelProblemDetailExceptions\Exceptions\ProblemDetailException;
class ExampleException extends ProblemDetailException
...
public function __construct(?\Throwable $previous = null)
{
parent::__construct(
title: 'Titulo curto para erro. Deve ser imutável',
detail: 'Descrição mais detalhada do erro podendo conter variaveis dinâmicas.' .
'Pode ser mutável a cada lançamento dependendo do contexto',
userTitle: 'Titulo amigavel para usuário final que pode ver o erro',
userMessage: 'Detalhamento amigavel para usuário que pode ver o erro',
httpStatus: 500,
internalCode: 'SHRD0001',
previous: $previous
);
}
...
declare(strict_types=1);
namespace App\Exceptions;
use Gsousadev\LaravelProblemDetailExceptions\Exceptions\ProblemDetailException;
class ExampleException extends ProblemDetailException
{
public function __construct(?\Throwable $previous = null)
{
parent::__construct(
title: 'Titulo curto para erro. Deve ser imutável',
detail: 'Descrição mais detalhada do erro podendo conter variaveis dinâmicas.' .
'Pode ser mutável a cada lançamento dependendo do contexto',
userTitle: 'Titulo amigavel para usuário final que pode ver o erro',
userMessage: 'Detalhamento amigavel para usuário que pode ver o erro',
httpStatus: 500,
internalCode: 'SHRD0001',
previous: $previous
);
}
}
try {
...
} catch(\Exception $exception){
throw new ExampleException($exception);
}
...
class ExampleException extends ProblemDetailException
{
protected ?bool $logThrow = true
public function __construct(?\Throwable $previous = null)
...
namespace App\Exceptions;
use Gsousadev\LaravelProblemDetailExceptions\Exceptions\ProblemDetailException;
use Gsousadev\LaravelProblemDetailExceptions\Exceptions\UnexpectedException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
public function register()
{
$this->renderable(function (Throwable $e) {
if (!$e instanceof ProblemDetailException) {
throw new UnexpectedException($e);
}
});
}
public function report(Throwable $e)
{
if ($e instanceof ProblemDetailException) {
parent::report($e);
}
}
}