This commit is contained in:
as2252258@163.com
2021-09-10 03:50:45 +08:00
parent a61e663cf0
commit 2cf472082f
4 changed files with 543 additions and 507 deletions
+10 -1
View File
@@ -28,7 +28,6 @@ abstract class Request implements RequestInterface
protected string $method; protected string $method;
/** /**
* @return string * @return string
*/ */
@@ -68,6 +67,16 @@ abstract class Request implements RequestInterface
} }
/**
* @param string $method
* @return bool
*/
public function isMethod(string $method): bool
{
return $this->method == $method;
}
/** /**
* @return UriInterface * @return UriInterface
*/ */
-40
View File
@@ -3,12 +3,8 @@
namespace Protocol\Message; namespace Protocol\Message;
use Http\Context\Context; use Http\Context\Context;
use Kiri\Core\Xml;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamInterface; use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UploadedFileInterface;
/** /**
@@ -98,42 +94,6 @@ class ServerRequest extends Request implements ServerRequestInterface
} }
/**
* @param string $name
* @param mixed|null $default
* @return mixed
*/
public function post(string $name, mixed $default = null): mixed
{
return $this->parsedBody[$name] ?? $default;
}
/**
* @param string $name
* @param string|null $default
* @return string|null
*/
public function query(string $name, ?string $default = null): ?string
{
return $this->queryParams[$name] ?? $default;
}
/**
* @param string $name
* @return \Psr\Http\Message\UploadedFileInterface|null
*/
public function file(string $name): ?UploadedFileInterface
{
if (isset($this->parsedBody[$name])) {
$files = $this->parsedBody[$name];
return new Uploaded($files['tmp_name'], $files['name'], $files['type'], $files['size'], $files['error']);
}
return null;
}
/** /**
* @return null|array * @return null|array
*/ */
+91 -24
View File
@@ -5,12 +5,17 @@ namespace Server\Constrict;
use Http\Context\Context; use Http\Context\Context;
use Http\IInterface\AuthIdentity; use Http\IInterface\AuthIdentity;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
use Kiri\Core\Xml;
use Kiri\Kiri; use Kiri\Kiri;
use Protocol\Message\ServerRequest;
use Protocol\Message\Stream;
use Protocol\Message\Uri;
use Protocol\Message\Uploaded;
use Psr\Http\Message\StreamInterface; use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UploadedFileInterface;
use Psr\Http\Message\UriInterface; use Psr\Http\Message\UriInterface;
use Server\Message\Request as RequestMessage; use Server\Message\Request as RequestMessage;
use Server\Message\Response; use Server\Message\Response;
use Server\Message\Uploaded;
use Server\RequestInterface; use Server\RequestInterface;
use Server\ResponseInterface; use Server\ResponseInterface;
@@ -20,11 +25,11 @@ class Request implements RequestInterface
/** /**
* @return RequestMessage * @return ServerRequest
*/ */
private function __call__(): RequestMessage private function __call__(): ServerRequest
{ {
return Context::getContext(RequestInterface::class, new RequestMessage()); return Context::getContext(RequestInterface::class, new ServerRequest());
} }
@@ -45,9 +50,11 @@ class Request implements RequestInterface
*/ */
public static function create(\Swoole\Http\Request $request): array public static function create(\Swoole\Http\Request $request): array
{ {
$serverRequest = ServerRequest::createServerRequest($request);
Context::setContext(ResponseInterface::class, $response = new Response()); Context::setContext(ResponseInterface::class, $response = new Response());
Context::setContext(RequestInterface::class, RequestMessage::parseRequest($request)); Context::setContext(RequestInterface::class, $serverRequest);
return [Kiri::getDi()->get(Request::class), $response]; return [Kiri::getDi()->get(Request::class), $response];
} }
@@ -232,11 +239,30 @@ class Request implements RequestInterface
/** /**
* @param string $name * @param string $name
* @return Uploaded|null * @return UploadedFileInterface|null
*/ */
public function file(string $name): ?Uploaded public function file(string $name): ?UploadedFileInterface
{ {
return $this->__call__()->{__FUNCTION__}($name); $files = $this->__call__()->getParsedBody();
if (!isset($files[$name])) {
return null;
}
return new Uploaded($files['tmp_name'], $files['name'], $files['type'], $files['size'], $files['error']);
}
/**
* @param string|null $name
* @param mixed|null $default
* @return mixed
*/
private function _getParsedBody(string|null $name = null, mixed $default = null): mixed
{
$body = $this->__call__()->getParsedBody();
if (empty($name)) {
return $body;
}
return $body[$name] ?? $default;
} }
@@ -245,7 +271,7 @@ class Request implements RequestInterface
*/ */
public function all(): array public function all(): array
{ {
return $this->__call__()->{__FUNCTION__}(); return $this->_getParsedBody();
} }
@@ -256,7 +282,9 @@ class Request implements RequestInterface
*/ */
public function query(string $name, bool|int|string|null $default = null): mixed public function query(string $name, bool|int|string|null $default = null): mixed
{ {
return $this->__call__()->{__FUNCTION__}($name, $default); $files = $this->__call__()->getQueryParams();
return $files[$name] ?? $default;
} }
@@ -267,7 +295,7 @@ class Request implements RequestInterface
*/ */
public function post(string $name, int|bool|array|string|null $default = null): mixed public function post(string $name, int|bool|array|string|null $default = null): mixed
{ {
return $this->__call__()->{__FUNCTION__}($name, $default); return $this->_getParsedBody($name, $default);
} }
@@ -275,10 +303,15 @@ class Request implements RequestInterface
* @param string $name * @param string $name
* @param bool $required * @param bool $required
* @return int|null * @return int|null
* @throws \Exception
*/ */
public function int(string $name, bool $required = false): ?int public function int(string $name, bool $required = false): ?int
{ {
return $this->__call__()->{__FUNCTION__}($name, $required); $int = $this->_getParsedBody($name);
if (is_null($int) && $required) {
throw new \Exception('Required param "' . $name . '"');
}
return (int)$int;
} }
@@ -286,10 +319,15 @@ class Request implements RequestInterface
* @param string $name * @param string $name
* @param bool $required * @param bool $required
* @return float|null * @return float|null
* @throws \Exception
*/ */
public function float(string $name, bool $required = false): ?float public function float(string $name, bool $required = false): ?float
{ {
return $this->__call__()->{__FUNCTION__}($name, $required); $int = $this->_getParsedBody($name);
if (is_null($int) && $required) {
throw new \Exception('Required param "' . $name . '"');
}
return (float)$int;
} }
@@ -297,10 +335,15 @@ class Request implements RequestInterface
* @param string $name * @param string $name
* @param bool $required * @param bool $required
* @return string|null * @return string|null
* @throws \Exception
*/ */
public function date(string $name, bool $required = false): ?string public function date(string $name, bool $required = false): ?string
{ {
return $this->__call__()->{__FUNCTION__}($name, $required); $int = $this->_getParsedBody($name);
if (is_null($int) && $required) {
throw new \Exception('Required param "' . $name . '"');
}
return (string)$int;
} }
@@ -308,10 +351,15 @@ class Request implements RequestInterface
* @param string $name * @param string $name
* @param bool $required * @param bool $required
* @return int|null * @return int|null
* @throws \Exception
*/ */
public function timestamp(string $name, bool $required = false): ?int public function timestamp(string $name, bool $required = false): ?int
{ {
return $this->__call__()->{__FUNCTION__}($name, $required); $int = $this->_getParsedBody($name);
if (is_null($int) && $required) {
throw new \Exception('Required param "' . $name . '"');
}
return (int)$int;
} }
@@ -319,10 +367,15 @@ class Request implements RequestInterface
* @param string $name * @param string $name
* @param bool $required * @param bool $required
* @return string|null * @return string|null
* @throws \Exception
*/ */
public function string(string $name, bool $required = false): ?string public function string(string $name, bool $required = false): ?string
{ {
return $this->__call__()->{__FUNCTION__}($name, $required); $int = $this->_getParsedBody($name);
if (is_null($int) && $required) {
throw new \Exception('Required param "' . $name . '"');
}
return (string)$int;
} }
@@ -333,7 +386,11 @@ class Request implements RequestInterface
*/ */
public function array(string $name, array $default = []): ?array public function array(string $name, array $default = []): ?array
{ {
return $this->__call__()->{__FUNCTION__}($name, $default); $int = $this->_getParsedBody($name);
if (is_null($int)) {
return $default;
}
return $int;
} }
@@ -342,7 +399,7 @@ class Request implements RequestInterface
*/ */
public function gets(): ?array public function gets(): ?array
{ {
return $this->__call__()->{__FUNCTION__}(); return $this->__call__()->getQueryParams();
} }
@@ -354,7 +411,13 @@ class Request implements RequestInterface
*/ */
public function offset(string $field = 'page', string $sizeField = 'size', int $max = 100): float|int public function offset(string $field = 'page', string $sizeField = 'size', int $max = 100): float|int
{ {
return $this->__call__()->{__FUNCTION__}($field, $sizeField, $max); $page = $this->query($field);
$size = $this->size($sizeField, $max);
$offset = ($page - 1) * $size;
if ($offset < 0) {
$offset = 0;
}
return $offset;
} }
@@ -365,7 +428,11 @@ class Request implements RequestInterface
*/ */
public function size(string $field = 'size', int $max = 100): int public function size(string $field = 'size', int $max = 100): int
{ {
return $this->__call__()->{__FUNCTION__}($field, $max); $size = $this->query($field);
if ($size > $max) {
$size = $max;
}
return $size;
} }
@@ -376,7 +443,7 @@ class Request implements RequestInterface
*/ */
public function input($name, $default = null): mixed public function input($name, $default = null): mixed
{ {
return $this->__call__()->{__FUNCTION__}($name, $default); return $this->_getParsedBody($name, $default);
} }
@@ -410,7 +477,7 @@ class Request implements RequestInterface
/** /**
* @return string|null * @return string|null
*/ */
public function getAccessControlAllowOrigin(): ?string #[Pure] public function getAccessControlAllowOrigin(): ?string
{ {
return $this->__call__()->{__FUNCTION__}(); return $this->__call__()->{__FUNCTION__}();
} }
@@ -419,7 +486,7 @@ class Request implements RequestInterface
/** /**
* @return string|null * @return string|null
*/ */
public function getAccessControlAllowHeaders(): ?string #[Pure] public function getAccessControlAllowHeaders(): ?string
{ {
return $this->__call__()->{__FUNCTION__}(); return $this->__call__()->{__FUNCTION__}();
} }
@@ -428,7 +495,7 @@ class Request implements RequestInterface
/** /**
* @return string|null * @return string|null
*/ */
public function getAccessControlRequestMethod(): ?string #[Pure] public function getAccessControlRequestMethod(): ?string
{ {
return $this->__call__()->{__FUNCTION__}(); return $this->__call__()->{__FUNCTION__}();
} }
+3 -3
View File
@@ -5,8 +5,8 @@ namespace Server;
use Http\IInterface\AuthIdentity; use Http\IInterface\AuthIdentity;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
use Psr\Http\Message\UploadedFileInterface;
use Server\Message\Request; use Server\Message\Request;
use Server\Message\Uploaded;
/** /**
* *
@@ -24,9 +24,9 @@ interface RequestInterface extends \Psr\Http\Message\RequestInterface
/** /**
* @param string $name * @param string $name
* @return Uploaded|null * @return UploadedFileInterface|null
*/ */
public function file(string $name): ?Uploaded; public function file(string $name): ?UploadedFileInterface;
/** /**