From 7beef23040d3ce81d31968708e65d0a6b8415ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Sat, 18 Sep 2021 11:20:58 +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-handler/Abstracts/Handler.php | 33 +++++++++++++++++++++++++++++- http-handler/Dispatcher.php | 31 +--------------------------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/http-handler/Abstracts/Handler.php b/http-handler/Abstracts/Handler.php index 00f71120..1cbcfc77 100644 --- a/http-handler/Abstracts/Handler.php +++ b/http-handler/Abstracts/Handler.php @@ -3,6 +3,7 @@ namespace Http\Handler\Abstracts; use Http\Handler\Handler as CHl; +use Kiri\Core\Help; use Kiri\Kiri; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -50,6 +51,7 @@ abstract class Handler implements RequestHandlerInterface /** * @return mixed + * @throws \Exception */ protected function dispatcher(): mixed { @@ -61,7 +63,36 @@ abstract class Handler implements RequestHandlerInterface $controller = Kiri::getDi()->get($controller); - return call_user_func([$controller, $action], ...$this->handler->params); + $response = call_user_func([$controller, $action], ...$this->handler->params); + if (!$response instanceof ResponseInterface) { + $response = $this->transferToResponse($response); + } + return $response; + } + + + /** + * @param mixed $responseData + * @return \Server\Constrict\ResponseInterface + * @throws \Exception + */ + private function transferToResponse(mixed $responseData): ResponseInterface + { + $interface = response()->withStatus(200); + if (!$interface->hasContentType()) { + $interface->withContentType('application/json;charset=utf-8'); + } + if (is_object($responseData)) { + $responseData = get_object_vars($responseData); + } + if ($interface->getContentType() == 'application/xml;charset=utf-8') { + $interface->getBody()->write(Help::toXml($responseData)); + } else if (is_array($responseData)) { + $interface->getBody()->write(json_encode($responseData)); + } else { + $interface->getBody()->write((string)$responseData); + } + return $interface; } diff --git a/http-handler/Dispatcher.php b/http-handler/Dispatcher.php index a12d5a61..ffefff62 100644 --- a/http-handler/Dispatcher.php +++ b/http-handler/Dispatcher.php @@ -22,35 +22,6 @@ class Dispatcher extends \Http\Handler\Abstracts\Handler */ public function handle(ServerRequestInterface $request): ResponseInterface { - $response = $this->execute($request); - if (!$response instanceof ResponseInterface) { - return $this->transferToResponse($response); - } - return $response; - } - - - /** - * @param mixed $responseData - * @return \Server\Constrict\ResponseInterface - * @throws Exception - */ - private function transferToResponse(mixed $responseData): ResponseInterface - { - $interface = response()->withStatus(200); - if (!$interface->hasContentType()) { - $interface->withContentType('application/json;charset=utf-8'); - } - if (is_object($responseData)) { - $responseData = get_object_vars($responseData); - } - if ($interface->getContentType() == 'application/xml;charset=utf-8') { - $interface->getBody()->write(Help::toXml($responseData)); - } else if (is_array($responseData)) { - $interface->getBody()->write(json_encode($responseData)); - } else { - $interface->getBody()->write((string)$responseData); - } - return $interface; + return $this->execute($request); } }