modify
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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,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);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user