phpvms/app/Exceptions/HttpException.php
2019-08-22 12:26:46 -04:00

64 lines
1.6 KiB
PHP

<?php
namespace App\Exceptions;
use Symfony\Component\HttpKernel\Exception\HttpException as SymfonyHttpException;
abstract class HttpException extends SymfonyHttpException
{
/**
* Return the RFC 7807 error type (without the URL root)
*/
abstract public function getErrorType(): string;
/**
* Get the detailed error string
*/
abstract public function getErrorDetails(): string;
/**
* Return an array with the error details, merged with the RFC7807 response
*/
abstract public function getErrorMetadata(): array;
/**
* Return the error message as JSON
*/
public function getJson()
{
$response = [];
$response['type'] = config('phpvms.error_root').'/'.$this->getErrorType();
$response['title'] = $this->getMessage();
$response['details'] = $this->getErrorDetails();
$response['status'] = $this->getStatusCode();
// For backwards compatibility
$response['error'] = [
'status' => $this->getStatusCode(),
'message' => $this->getErrorDetails(),
];
return array_merge($response, $this->getErrorMetadata());
}
/**
* Return a response object that can be used by Laravel
*
* @return \Illuminate\Http\JsonResponse
*/
public function getResponse()
{
$headers = [];
$headers['content-type'] = 'application/problem+json';
$headers = array_merge($headers, $this->getHeaders());
return response()
->json(
$this->getJson(),
$this->getStatusCode(),
$headers
);
}
}