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.
* @param string $className
* @param string $value
* @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
{
if ($this->withContext) {
return Context::getContext($this->className);
return Context::getContext($this->value);
}
if (class_exists($this->className)) {
return Snowflake::getDi()->get($this->className, $this->args);
} else if (Snowflake::app()->has($this->className)) {
return Snowflake::app()->get($this->className);
if (class_exists($this->value)) {
return Snowflake::getDi()->get($this->value, $this->args);
} else if (Snowflake::app()->has($this->value)) {
return Snowflake::app()->get($this->value);
} else {
return $this->className;
return $this->value;
}
}
+2 -2
View File
@@ -5,7 +5,7 @@ namespace Annotation\Route;
use Annotation\Attribute;
use HttpServer\Route\Middlewares;
use HttpServer\Route\MiddlewareManager;
use Snowflake\Snowflake;
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
{
$middleware = Snowflake::getDi()->get(Middlewares::class);
$middleware = Snowflake::getDi()->get(MiddlewareManager::class);
$middleware->addMiddlewares($class, $method, $this->middleware);
return $this;
}
+11 -17
View File
@@ -5,21 +5,15 @@ namespace HttpServer;
use Annotation\Inject;
use Exception;
use HttpServer\Abstracts\HttpService;
use HttpServer\Http\HttpHeaders;
use HttpServer\Http\HttpParams;
use HttpServer\Http\Request;
use HttpServer\Http\Response;
use Snowflake\Abstracts\Input;
use Snowflake\Abstracts\TraitApplication;
use Snowflake\Snowflake;
/**
* Class WebController
* @package Snowflake\Snowflake\Web
* @property-read HttpParams $input
* @property-read HttpHeaders $header
*/
class Controller
{
@@ -30,33 +24,33 @@ class Controller
/**
* inject request
*
* @var \HttpServer\Http\Request
* @var \HttpServer\Http\Request|null
*/
#[Inject(className: 'request', withContext: true)]
protected ?Request $request = null;
#[Inject(value: 'request', withContext: true)]
public ?Request $request = null;
/**
* @var \HttpServer\Http\HttpParams
* @var \HttpServer\Http\HttpParams|null
*/
#[Inject(className: 'input', withContext: true)]
protected ?HttpParams $input = null;
#[Inject(value: HttpParams::class, withContext: true)]
public ?HttpParams $input = null;
/**
* @var \HttpServer\Http\HttpHeaders
* @var \HttpServer\Http\HttpHeaders|null
*/
#[Inject(className: 'header', withContext: true)]
protected ?HttpHeaders $header = null;
#[Inject(value: HttpHeaders::class, withContext: true)]
public ?HttpHeaders $header = null;
/**
* inject response
*
* @var \HttpServer\Http\Response
* @var \HttpServer\Http\Response|null
*/
#[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)) {
$sRequest->params->setPosts($request->post ?? []);
}
Context::setContext(HttpParams::class, $sRequest->params);
$sRequest->headers = new HttpHeaders(array_merge($request->server, $request->header));
Context::setContext(HttpHeaders::class, $sRequest->headers);
$sRequest->uri = $sRequest->headers->get('request_uri');
$sRequest->parseUri();
Context::setContext('input', $sRequest->params);
Context::setContext('header', $sRequest->headers);
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
*/
class Middlewares extends BaseObject
class MiddlewareManager extends BaseObject
{
private static array $_middlewares = [];
@@ -26,7 +26,7 @@ class Middlewares extends BaseObject
public function addMiddlewares($class, $method, array|string $middlewares)
{
if (is_object($class)) {
$class = get_class($class);
$class = $class::class;
}
if (!isset(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 $method
+9 -4
View File
@@ -9,6 +9,7 @@ use Annotation\Route\RpcProducer;
use Closure;
use Exception;
use HttpServer\Abstracts\HttpService;
use HttpServer\Controller;
use HttpServer\Http\Context;
use HttpServer\Http\Request;
use JetBrains\PhpStorm\Pure;
@@ -95,7 +96,7 @@ class Node extends HttpService
$this->handler = $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()
);
}
@@ -114,10 +115,12 @@ class Node extends HttpService
/** @var Aop $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) {
$dispatchParam = Context::getContext('dispatch-param', [\request()]);
if (is_array($this->handler)){
Snowflake::injectProperty($this->handler[0]);
}
return call_user_func($application->handler, ...$dispatchParam);
};
}
@@ -129,7 +132,9 @@ class Node extends HttpService
$dispatchParam = Context::getContext('dispatch-param', [\request()]);
$asp = $reflect->newInstance($this->handler);
if (is_array($this->handler)){
Snowflake::injectProperty($this->handler[0]);
}
call_user_func($callback, $asp, $dispatchParam);
};
}
+7 -8
View File
@@ -370,7 +370,7 @@ class Router extends HttpService implements RouterInterface
$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
{
if (is_string($value)) {
$value = Snowflake::createObject($value);
if (!($value instanceof Middleware)) {
return null;
}
return [$value, 'onHandler'];
} else {
if (!is_string($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