From fc634c94ed3c85a864ecbeb24f71d11cba15170e Mon Sep 17 00:00:00 2001 From: "as2252258@163.com" Date: Sat, 28 Aug 2021 01:37:47 +0800 Subject: [PATCH] 111 --- http-server/ExceptionHandlerDispatcher.php | 4 +- http-server/Message/Response.php | 125 ++++++++++++--------- 2 files changed, 75 insertions(+), 54 deletions(-) diff --git a/http-server/ExceptionHandlerDispatcher.php b/http-server/ExceptionHandlerDispatcher.php index 39eb0db6..57ffc349 100644 --- a/http-server/ExceptionHandlerDispatcher.php +++ b/http-server/ExceptionHandlerDispatcher.php @@ -24,12 +24,12 @@ class ExceptionHandlerDispatcher implements ExceptionHandlerInterface { if ($exception->getCode() == 404) { return $response->withBody(new Stream($exception->getMessage())) - ->withHeader('Content-Type', 'text/html') + ->withContentType(Message\Response::CONTENT_TYPE_HTML) ->withStatus(404); } $code = $exception->getCode() == 0 ? 500 : $exception->getCode(); return $response->withBody(new Stream(jTraceEx($exception, null, true))) - ->withHeader('Content-Type', 'text/html') + ->withContentType(Message\Response::CONTENT_TYPE_HTML) ->withStatus($code); } diff --git a/http-server/Message/Response.php b/http-server/Message/Response.php index e6b10adc..aaf244fc 100644 --- a/http-server/Message/Response.php +++ b/http-server/Message/Response.php @@ -10,73 +10,94 @@ use Psr\Http\Message\ResponseInterface; */ class Response implements ResponseInterface, \Server\ResponseInterface { - use Message; + use Message; - public int $statusCode = 200; + public int $statusCode = 200; - public string $reasonPhrase = ''; + public string $reasonPhrase = ''; + + const CONTENT_TYPE_JSON = 'application/json;charset=utf-8'; + const CONTENT_TYPE_HTML = 'text/html;charset=utf-8'; + const CONTENT_TYPE_STREAM = 'octet-stream'; + const CONTENT_TYPE_XML = 'application/xml;charset=utf-8'; - /** - * @return int - */ - public function getStatusCode(): int - { - // TODO: Implement getStatusCode() method. - return $this->statusCode; - } + /** + * @param string $type + * @return $this + */ + public function withContentType(string $type): static + { + if (!in_array($type, [ + Response::CONTENT_TYPE_HTML, Response::CONTENT_TYPE_JSON, + Response::CONTENT_TYPE_STREAM, Response::CONTENT_TYPE_XML + ])) { + throw new \Exception('Wrong content type.'); + } + return $this->withHeader('Content-Type', $type); + } - /** - * @param int $code - * @param string $reasonPhrase - * @return static - */ - public function withStatus($code, $reasonPhrase = ''): static - { + + /** + * @return int + */ + public function getStatusCode(): int + { + // TODO: Implement getStatusCode() method. + return $this->statusCode; + } + + /** + * @param int $code + * @param string $reasonPhrase + * @return static + */ + public function withStatus($code, $reasonPhrase = ''): static + { $this->statusCode = $code; $this->reasonPhrase = $reasonPhrase; - return $this; - } + return $this; + } - /** - * @return string - */ - public function getReasonPhrase(): string - { - // TODO: Implement getReasonPhrase() method. - return $this->reasonPhrase; - } + /** + * @return string + */ + public function getReasonPhrase(): string + { + // TODO: Implement getReasonPhrase() method. + return $this->reasonPhrase; + } - /** - * @param $value - * @return ResponseInterface - */ - public function withAccessControlAllowHeaders($value): ResponseInterface - { - return $this->withHeader('Access-Control-Allow-Headers', $value); - } + /** + * @param $value + * @return ResponseInterface + */ + public function withAccessControlAllowHeaders($value): ResponseInterface + { + return $this->withHeader('Access-Control-Allow-Headers', $value); + } - /** - * @param $value - * @return ResponseInterface - */ - public function withAccessControlRequestMethod($value): ResponseInterface - { - return $this->withHeader('Access-Control-Request-Method', $value); - } + /** + * @param $value + * @return ResponseInterface + */ + public function withAccessControlRequestMethod($value): ResponseInterface + { + return $this->withHeader('Access-Control-Request-Method', $value); + } - /** - * @param $value - * @return ResponseInterface - */ - public function withAccessControlAllowOrigin($value): ResponseInterface - { - return $this->withHeader('Access-Control-Allow-Origin', $value); - } + /** + * @param $value + * @return ResponseInterface + */ + public function withAccessControlAllowOrigin($value): ResponseInterface + { + return $this->withHeader('Access-Control-Allow-Origin', $value); + } }