From 1f78b5c5247ab454339ae068d91e2f27aed08e40 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 3 May 2018 18:32:32 +0200 Subject: [PATCH] Improved CreateShortCodeContentNegotiationMiddleware so that it can determine the format based on a query partameter --- ...eShortCodeContentNegotiationMiddleware.php | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/module/Rest/src/Middleware/ShortCode/CreateShortCodeContentNegotiationMiddleware.php b/module/Rest/src/Middleware/ShortCode/CreateShortCodeContentNegotiationMiddleware.php index 41ce8813..6de16ae7 100644 --- a/module/Rest/src/Middleware/ShortCode/CreateShortCodeContentNegotiationMiddleware.php +++ b/module/Rest/src/Middleware/ShortCode/CreateShortCodeContentNegotiationMiddleware.php @@ -25,7 +25,11 @@ class CreateShortCodeContentNegotiationMiddleware implements MiddlewareInterface { /** @var JsonResponse $response */ $response = $handler->handle($request); - $acceptedType = $this->determineAcceptedType($request); + $acceptedType = $request->hasHeader('Accept') + ? $this->determineAcceptTypeFromHeader($request->getHeaderLine('Accept')) + : $this->determineAcceptTypeFromQuery($request->getQueryParams()); + + // If JSON was requested, return the response from next handler as is if ($acceptedType === self::JSON) { return $response; } @@ -38,9 +42,19 @@ class CreateShortCodeContentNegotiationMiddleware implements MiddlewareInterface return $resp; } - private function determineAcceptedType(ServerRequestInterface $request): string + private function determineAcceptTypeFromQuery(array $query): string { - $accepts = \explode(',', $request->getHeaderLine('Accept')); + if (! isset($query['format'])) { + return self::JSON; + } + + $format = \strtolower((string) $query['format']); + return $format === 'txt' ? self::PLAIN_TEXT : self::JSON; + } + + private function determineAcceptTypeFromHeader(string $acceptValue): string + { + $accepts = \explode(',', $acceptValue); $accept = \strtolower(\array_shift($accepts)); return \strpos($accept, 'text/plain') !== false ? self::PLAIN_TEXT : self::JSON; }