Moved error handler classes from Expressive namespace to ErrorHandler namespace

This commit is contained in:
Alejandro Celaya
2016-07-30 13:51:52 +02:00
parent 2a018f5415
commit e345c2bbfe
11 changed files with 15 additions and 16 deletions

View File

@@ -0,0 +1,47 @@
<?php
namespace Shlinkio\Shlink\Rest\ErrorHandler;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Shlinkio\Shlink\Common\ErrorHandler\ErrorHandlerInterface;
use Zend\Diactoros\Response\JsonResponse;
use Zend\Expressive\Router\RouteResult;
class JsonErrorHandler implements ErrorHandlerInterface
{
/**
* Final handler for an application.
*
* @param Request $request
* @param Response $response
* @param null|mixed $err
* @return Response
*/
public function __invoke(Request $request, Response $response, $err = null)
{
$hasRoute = $request->getAttribute(RouteResult::class) !== null;
$isNotFound = ! $hasRoute && ! isset($err);
if ($isNotFound) {
$responsePhrase = 'Not found';
$status = 404;
} else {
$status = $response->getStatusCode();
$responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase();
$status = $status < 400 ? 500 : $status;
}
return new JsonResponse([
'error' => $this->responsePhraseToCode($responsePhrase),
'message' => $responsePhrase,
], $status);
}
/**
* @param string $responsePhrase
* @return string
*/
protected function responsePhraseToCode($responsePhrase)
{
return strtoupper(str_replace(' ', '_', $responsePhrase));
}
}