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;
/**
* @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
*/
-40
View File
@@ -3,12 +3,8 @@
namespace Protocol\Message;
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\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
*/
+91 -24
View File
@@ -5,12 +5,17 @@ namespace Server\Constrict;
use Http\Context\Context;
use Http\IInterface\AuthIdentity;
use JetBrains\PhpStorm\Pure;
use Kiri\Core\Xml;
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\UploadedFileInterface;
use Psr\Http\Message\UriInterface;
use Server\Message\Request as RequestMessage;
use Server\Message\Response;
use Server\Message\Uploaded;
use Server\RequestInterface;
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
{
$serverRequest = ServerRequest::createServerRequest($request);
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];
}
@@ -232,11 +239,30 @@ class Request implements RequestInterface
/**
* @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
{
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
{
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
{
return $this->__call__()->{__FUNCTION__}($name, $default);
return $this->_getParsedBody($name, $default);
}
@@ -275,10 +303,15 @@ class Request implements RequestInterface
* @param string $name
* @param bool $required
* @return int|null
* @throws \Exception
*/
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 bool $required
* @return float|null
* @throws \Exception
*/
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 bool $required
* @return string|null
* @throws \Exception
*/
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 bool $required
* @return int|null
* @throws \Exception
*/
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 bool $required
* @return string|null
* @throws \Exception
*/
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
{
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
{
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
{
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
{
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
{
return $this->__call__()->{__FUNCTION__}($name, $default);
return $this->_getParsedBody($name, $default);
}
@@ -410,7 +477,7 @@ class Request implements RequestInterface
/**
* @return string|null
*/
public function getAccessControlAllowOrigin(): ?string
#[Pure] public function getAccessControlAllowOrigin(): ?string
{
return $this->__call__()->{__FUNCTION__}();
}
@@ -419,7 +486,7 @@ class Request implements RequestInterface
/**
* @return string|null
*/
public function getAccessControlAllowHeaders(): ?string
#[Pure] public function getAccessControlAllowHeaders(): ?string
{
return $this->__call__()->{__FUNCTION__}();
}
@@ -428,7 +495,7 @@ class Request implements RequestInterface
/**
* @return string|null
*/
public function getAccessControlRequestMethod(): ?string
#[Pure] public function getAccessControlRequestMethod(): ?string
{
return $this->__call__()->{__FUNCTION__}();
}
+3 -3
View File
@@ -5,8 +5,8 @@ namespace Server;
use Http\IInterface\AuthIdentity;
use JetBrains\PhpStorm\Pure;
use Psr\Http\Message\UploadedFileInterface;
use Server\Message\Request;
use Server\Message\Uploaded;
/**
*
@@ -24,9 +24,9 @@ interface RequestInterface extends \Psr\Http\Message\RequestInterface
/**
* @param string $name
* @return Uploaded|null
* @return UploadedFileInterface|null
*/
public function file(string $name): ?Uploaded;
public function file(string $name): ?UploadedFileInterface;
/**