From cde17048663ec364b568fe975bef4b7b548780b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 10 Sep 2021 18:04:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-message/Parse.php | 24 ++++++++++++------------ http-message/ServerRequest.php | 5 ++--- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/http-message/Parse.php b/http-message/Parse.php index 5a2cacd5..22c33f44 100644 --- a/http-message/Parse.php +++ b/http-message/Parse.php @@ -10,26 +10,26 @@ class Parse /** * @param $content - * @param $contentType * @return mixed * @throws \Exception */ - public static function data($content, $contentType): mixed + public static function data($content): mixed { if (empty($content)) { return null; } - if (str_starts_with($content, '<') || str_contains($contentType, 'xml')) { - return Xml::toArray($content); + if (is_bool($content) || is_numeric($content)) { + return $content; } - if (str_contains($contentType, 'x-www-form-urlencoded')) { - parse_str($content, $array); - return $array; - } - if (str_contains($contentType, 'serialize')) { - return unserialize($content); - } - return json_decode($content, true); + $start = substr($content, 0, 1); + return match ($start) { + '<' => Xml::toArray($content), + '[', '{' => json_decode($content, true), + default => call_user_func(function () use ($content) { + parse_str($content, $array); + return $array; + }) + }; } } diff --git a/http-message/ServerRequest.php b/http-message/ServerRequest.php index 48a84a36..eb83afaf 100644 --- a/http-message/ServerRequest.php +++ b/http-message/ServerRequest.php @@ -67,7 +67,6 @@ class ServerRequest extends Request implements ServerRequestInterface */ public static function createServerRequest(\Swoole\Http\Request $request): static|ServerRequestInterface { - $contentType = $request->header['content-type']; return (new static())->parseRequestHeaders($request) ->withServerParams($request->server) ->withServerTarget($request) @@ -77,9 +76,9 @@ class ServerRequest extends Request implements ServerRequestInterface ->withQueryParams($request->get ?? []) ->withUploadedFiles($request->files ?? []) ->withMethod($request->getMethod()) - ->withParsedBody(function (StreamInterface $stream, ?array $posts) use ($contentType) { + ->withParsedBody(function (StreamInterface $stream, ?array $posts) { try { - $content = Parse::data($stream->getContents(), $contentType); + $content = Parse::data($stream->getContents()); if (!empty($content)) { return $content; }