shlink/module/Rest/src/ErrorHandler/JsonErrorResponseGenerator.php
2019-02-26 22:56:43 +01:00

44 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace Shlinkio\Shlink\Rest\ErrorHandler;
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorResponseGeneratorInterface;
use Fig\Http\Message\StatusCodeInterface;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Throwable;
use Zend\Diactoros\Response\JsonResponse;
use function str_replace;
use function strtoupper;
class JsonErrorResponseGenerator implements ErrorResponseGeneratorInterface, StatusCodeInterface
{
/**
* Final handler for an application.
*
* @param \Throwable|\Exception $e
* @param Request $request
* @param Response $response
* @return Response
* @throws \InvalidArgumentException
*/
public function __invoke(?Throwable $e, Request $request, Response $response)
{
$status = $response->getStatusCode();
$responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase();
$status = $status < 400 ? self::STATUS_INTERNAL_SERVER_ERROR : $status;
return new JsonResponse([
'error' => $this->responsePhraseToCode($responsePhrase),
'message' => $responsePhrase,
], $status);
}
private function responsePhraseToCode(string $responsePhrase): string
{
return strtoupper(str_replace(' ', '_', $responsePhrase));
}
}