2016-07-27 20:17:23 +02:00
|
|
|
<?php
|
2017-10-12 10:13:20 +02:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
2016-07-30 13:51:52 +02:00
|
|
|
namespace Shlinkio\Shlink\Rest\ErrorHandler;
|
2016-07-27 20:17:23 +02:00
|
|
|
|
2017-03-24 21:31:55 +01:00
|
|
|
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorResponseGeneratorInterface;
|
|
|
|
|
use Fig\Http\Message\StatusCodeInterface;
|
2016-07-27 20:17:23 +02:00
|
|
|
use Psr\Http\Message\ResponseInterface as Response;
|
2016-08-12 17:54:32 +02:00
|
|
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
2016-07-27 20:17:23 +02:00
|
|
|
use Zend\Diactoros\Response\JsonResponse;
|
|
|
|
|
|
2017-03-25 09:46:29 +01:00
|
|
|
class JsonErrorResponseGenerator implements ErrorResponseGeneratorInterface, StatusCodeInterface
|
2016-07-27 20:17:23 +02:00
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Final handler for an application.
|
|
|
|
|
*
|
2017-03-24 21:31:55 +01:00
|
|
|
* @param \Throwable|\Exception $e
|
2016-07-27 20:17:23 +02:00
|
|
|
* @param Request $request
|
|
|
|
|
* @param Response $response
|
|
|
|
|
* @return Response
|
2017-10-13 11:55:14 +02:00
|
|
|
* @throws \InvalidArgumentException
|
2016-07-27 20:17:23 +02:00
|
|
|
*/
|
2017-03-24 21:31:55 +01:00
|
|
|
public function __invoke($e, Request $request, Response $response)
|
2016-07-27 20:17:23 +02:00
|
|
|
{
|
2017-03-24 21:31:55 +01:00
|
|
|
$status = $response->getStatusCode();
|
|
|
|
|
$responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase();
|
|
|
|
|
$status = $status < 400 ? self::STATUS_INTERNAL_SERVER_ERROR : $status;
|
2016-07-27 20:17:23 +02:00
|
|
|
|
|
|
|
|
return new JsonResponse([
|
|
|
|
|
'error' => $this->responsePhraseToCode($responsePhrase),
|
|
|
|
|
'message' => $responsePhrase,
|
|
|
|
|
], $status);
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-13 11:55:14 +02:00
|
|
|
protected function responsePhraseToCode(string $responsePhrase): string
|
2016-07-27 20:17:23 +02:00
|
|
|
{
|
|
|
|
|
return strtoupper(str_replace(' ', '_', $responsePhrase));
|
|
|
|
|
}
|
|
|
|
|
}
|