This commit is contained in:
as2252258@163.com
2021-07-27 04:16:42 +08:00
parent 2e0b436e73
commit 903f70fc8f
8 changed files with 641 additions and 635 deletions
+8 -8
View File
@@ -21,10 +21,10 @@ use Snowflake\Snowflake;
/** /**
* Inject constructor. * Inject constructor.
* @param string $className * @param string $value
* @param array $args * @param array $args
*/ */
public function __construct(private string $className, public bool $withContext = false, private array $args = []) public function __construct(private string $value, public bool $withContext = false, private array $args = [])
{ {
} }
@@ -93,14 +93,14 @@ use Snowflake\Snowflake;
private function parseInjectValue(): mixed private function parseInjectValue(): mixed
{ {
if ($this->withContext) { if ($this->withContext) {
return Context::getContext($this->className); return Context::getContext($this->value);
} }
if (class_exists($this->className)) { if (class_exists($this->value)) {
return Snowflake::getDi()->get($this->className, $this->args); return Snowflake::getDi()->get($this->value, $this->args);
} else if (Snowflake::app()->has($this->className)) { } else if (Snowflake::app()->has($this->value)) {
return Snowflake::app()->get($this->className); return Snowflake::app()->get($this->value);
} else { } else {
return $this->className; return $this->value;
} }
} }
+2 -2
View File
@@ -5,7 +5,7 @@ namespace Annotation\Route;
use Annotation\Attribute; use Annotation\Attribute;
use HttpServer\Route\Middlewares; use HttpServer\Route\MiddlewareManager;
use Snowflake\Snowflake; use Snowflake\Snowflake;
use HttpServer\IInterface\Middleware as IMiddleware; use HttpServer\IInterface\Middleware as IMiddleware;
@@ -47,7 +47,7 @@ use HttpServer\IInterface\Middleware as IMiddleware;
*/ */
public function execute(mixed $class, mixed $method = null): static public function execute(mixed $class, mixed $method = null): static
{ {
$middleware = Snowflake::getDi()->get(Middlewares::class); $middleware = Snowflake::getDi()->get(MiddlewareManager::class);
$middleware->addMiddlewares($class, $method, $this->middleware); $middleware->addMiddlewares($class, $method, $this->middleware);
return $this; return $this;
} }
+11 -17
View File
@@ -5,21 +5,15 @@ namespace HttpServer;
use Annotation\Inject; use Annotation\Inject;
use Exception;
use HttpServer\Abstracts\HttpService;
use HttpServer\Http\HttpHeaders; use HttpServer\Http\HttpHeaders;
use HttpServer\Http\HttpParams; use HttpServer\Http\HttpParams;
use HttpServer\Http\Request; use HttpServer\Http\Request;
use HttpServer\Http\Response; use HttpServer\Http\Response;
use Snowflake\Abstracts\Input;
use Snowflake\Abstracts\TraitApplication; use Snowflake\Abstracts\TraitApplication;
use Snowflake\Snowflake;
/** /**
* Class WebController * Class WebController
* @package Snowflake\Snowflake\Web * @package Snowflake\Snowflake\Web
* @property-read HttpParams $input
* @property-read HttpHeaders $header
*/ */
class Controller class Controller
{ {
@@ -30,33 +24,33 @@ class Controller
/** /**
* inject request * inject request
* *
* @var \HttpServer\Http\Request * @var \HttpServer\Http\Request|null
*/ */
#[Inject(className: 'request', withContext: true)] #[Inject(value: 'request', withContext: true)]
protected ?Request $request = null; public ?Request $request = null;
/** /**
* @var \HttpServer\Http\HttpParams * @var \HttpServer\Http\HttpParams|null
*/ */
#[Inject(className: 'input', withContext: true)] #[Inject(value: HttpParams::class, withContext: true)]
protected ?HttpParams $input = null; public ?HttpParams $input = null;
/** /**
* @var \HttpServer\Http\HttpHeaders * @var \HttpServer\Http\HttpHeaders|null
*/ */
#[Inject(className: 'header', withContext: true)] #[Inject(value: HttpHeaders::class, withContext: true)]
protected ?HttpHeaders $header = null; public ?HttpHeaders $header = null;
/** /**
* inject response * inject response
* *
* @var \HttpServer\Http\Response * @var \HttpServer\Http\Response|null
*/ */
#[Inject('response')] #[Inject('response')]
protected ?Response $response = null; public ?Response $response = null;
} }
+3 -25
View File
@@ -463,39 +463,17 @@ class Request extends HttpService
if (!empty($request->post)) { if (!empty($request->post)) {
$sRequest->params->setPosts($request->post ?? []); $sRequest->params->setPosts($request->post ?? []);
} }
Context::setContext(HttpParams::class, $sRequest->params);
$sRequest->headers = new HttpHeaders(array_merge($request->server, $request->header)); $sRequest->headers = new HttpHeaders(array_merge($request->server, $request->header));
Context::setContext(HttpHeaders::class, $sRequest->headers);
$sRequest->uri = $sRequest->headers->get('request_uri'); $sRequest->uri = $sRequest->headers->get('request_uri');
$sRequest->parseUri(); $sRequest->parseUri();
Context::setContext('input', $sRequest->params);
Context::setContext('header', $sRequest->headers);
return $sRequest; return $sRequest;
} }
/**
* @param $frame
* @param string $route
* @param string $event
* @return Request
*/
public static function socketQuery($frame, string $event = Socket::MESSAGE, string $route = 'event'): Request
{
$sRequest = new Request();
$sRequest->fd = $frame->fd;
$sRequest->startTime = microtime(true);
$sRequest->params = new HttpParams([], [], []);
$sRequest->headers = new HttpHeaders([]);
$sRequest->headers->replace('request_method', 'sw::socket');
$sRequest->headers->replace('request_uri', $event . '::' . $route);
$sRequest->parseUri();
return Context::setContext('request', $sRequest);
}
} }
@@ -9,10 +9,10 @@ use Snowflake\Abstracts\BaseObject;
/** /**
* Class Middlewares * Class MiddlewareManager
* @package HttpServer\Route * @package HttpServer\Route
*/ */
class Middlewares extends BaseObject class MiddlewareManager extends BaseObject
{ {
private static array $_middlewares = []; private static array $_middlewares = [];
@@ -26,7 +26,7 @@ class Middlewares extends BaseObject
public function addMiddlewares($class, $method, array|string $middlewares) public function addMiddlewares($class, $method, array|string $middlewares)
{ {
if (is_object($class)) { if (is_object($class)) {
$class = get_class($class); $class = $class::class;
} }
if (!isset(static::$_middlewares[$class . '::' . $method])) { if (!isset(static::$_middlewares[$class . '::' . $method])) {
static::$_middlewares[$class . '::' . $method] = []; static::$_middlewares[$class . '::' . $method] = [];
@@ -45,6 +45,20 @@ class Middlewares extends BaseObject
} }
/**
* @param $class
* @param $method
* @return bool
*/
public function hasMiddleware($class, $method)
{
if (is_object($class)) {
$class = $class::class;
}
return isset(static::$_middlewares[$class . '::' . $method]);
}
/** /**
* @param $class * @param $class
* @param $method * @param $method
+9 -4
View File
@@ -9,6 +9,7 @@ use Annotation\Route\RpcProducer;
use Closure; use Closure;
use Exception; use Exception;
use HttpServer\Abstracts\HttpService; use HttpServer\Abstracts\HttpService;
use HttpServer\Controller;
use HttpServer\Http\Context; use HttpServer\Http\Context;
use HttpServer\Http\Request; use HttpServer\Http\Request;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
@@ -95,7 +96,7 @@ class Node extends HttpService
$this->handler = $handler; $this->handler = $handler;
} }
if (!empty($this->handler) && is_array($this->handler)) { if (!empty($this->handler) && is_array($this->handler)) {
$this->callback = di(Middlewares::class)->callerMiddlewares( $this->callback = di(MiddlewareManager::class)->callerMiddlewares(
$this->handler[0], $this->handler[1], $this->createDispatch() $this->handler[0], $this->handler[1], $this->createDispatch()
); );
} }
@@ -114,10 +115,12 @@ class Node extends HttpService
/** @var Aop $aop */ /** @var Aop $aop */
$aop = Snowflake::app()->get('aop'); $aop = Snowflake::app()->get('aop');
if (!is_array($this->handler) || !$aop->hasAop($this->handler)) { if ($this->handler instanceof Closure || !$aop->hasAop($this->handler)) {
return static function () use ($application) { return static function () use ($application) {
$dispatchParam = Context::getContext('dispatch-param', [\request()]); $dispatchParam = Context::getContext('dispatch-param', [\request()]);
if (is_array($this->handler)){
Snowflake::injectProperty($this->handler[0]);
}
return call_user_func($application->handler, ...$dispatchParam); return call_user_func($application->handler, ...$dispatchParam);
}; };
} }
@@ -129,7 +132,9 @@ class Node extends HttpService
$dispatchParam = Context::getContext('dispatch-param', [\request()]); $dispatchParam = Context::getContext('dispatch-param', [\request()]);
$asp = $reflect->newInstance($this->handler); $asp = $reflect->newInstance($this->handler);
if (is_array($this->handler)){
Snowflake::injectProperty($this->handler[0]);
}
call_user_func($callback, $asp, $dispatchParam); call_user_func($callback, $asp, $dispatchParam);
}; };
} }
+7 -8
View File
@@ -370,7 +370,7 @@ class Router extends HttpService implements RouterInterface
$array[] = $this->getMiddlewareInstance($value); $array[] = $this->getMiddlewareInstance($value);
} }
} }
return $array; return array_filter($array);
} }
@@ -382,15 +382,14 @@ class Router extends HttpService implements RouterInterface
*/ */
private function getMiddlewareInstance($value): null|Closure|array private function getMiddlewareInstance($value): null|Closure|array
{ {
if (is_string($value)) { if (!is_string($value)) {
$value = Snowflake::createObject($value);
if (!($value instanceof Middleware)) {
return null;
}
return [$value, 'onHandler'];
} else {
return $value; return $value;
} }
$value = Snowflake::createObject($value);
if (!($value instanceof Middleware)) {
return null;
}
return [$value, 'onHandler'];
} }
+584 -568
View File
File diff suppressed because it is too large Load Diff