getMethod(); $currentParams = $request->getParsedBody(); // In requests that do not allow body or if the body has already been parsed, continue to next middleware if (! empty($currentParams) || contains([ self::METHOD_GET, self::METHOD_HEAD, self::METHOD_OPTIONS, ], $method)) { return $handler->handle($request); } // If the accepted content is JSON, try to parse the body from JSON $contentType = $this->getRequestContentType($request); if (contains(['application/json', 'text/json', 'application/x-json'], $contentType)) { return $handler->handle($this->parseFromJson($request)); } return $handler->handle($this->parseFromUrlEncoded($request)); } /** * @param Request $request * @return string */ private function getRequestContentType(Request $request): string { $contentType = $request->getHeaderLine('Content-type'); $contentTypes = explode(';', $contentType); return trim(array_shift($contentTypes)); } /** * @param Request $request * @return Request */ private function parseFromJson(Request $request): Request { $rawBody = (string) $request->getBody(); if (empty($rawBody)) { return $request; } $parsedJson = json_decode($rawBody); return $request->withParsedBody($parsedJson); } /** * @param Request $request * @return Request */ private function parseFromUrlEncoded(Request $request): Request { $rawBody = (string) $request->getBody(); if (empty($rawBody)) { return $request; } $parsedBody = []; parse_str($rawBody, $parsedBody); return $request->withParsedBody($parsedBody); } }