diff --git a/src/Base/Controller.php b/src/Base/Controller.php index 7337e4d..17f91d5 100644 --- a/src/Base/Controller.php +++ b/src/Base/Controller.php @@ -5,50 +5,23 @@ namespace Kiri\Router\Base; use Kiri; -use Kiri\Router\Response; use Kiri\Router\Request; use Psr\Container\ContainerInterface; -use Psr\Log\LoggerInterface; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; -use Kiri\Di\Inject\Container; /** * Class WebController * @package Kiri\Web + * @property RequestInterface $request + * @property ResponseInterface $response + * @property ContainerInterface $container + * @property Kiri\Error\StdoutLogger $logger */ -abstract class Controller +class Controller extends Kiri\Abstracts\Component { - /** - * @var Request - */ - #[Container(RequestInterface::class)] - public RequestInterface $request; - - - /** - * @var Response - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - - /** - * @var ContainerInterface - */ - #[Container(ContainerInterface::class)] - public ContainerInterface $container; - - - /** - * @var Kiri\Error\StdoutLogger - */ - #[Container(LoggerInterface::class)] - public Kiri\Error\StdoutLogger $logger; - - /** * @param Request $request * @return true @@ -57,5 +30,4 @@ abstract class Controller { return true; } - } diff --git a/src/Base/CoreMiddleware.php b/src/Base/CoreMiddleware.php index 3734372..e42d1c9 100644 --- a/src/Base/CoreMiddleware.php +++ b/src/Base/CoreMiddleware.php @@ -18,14 +18,6 @@ use Psr\Http\Server\RequestHandlerInterface; class CoreMiddleware implements MiddlewareInterface { - - /** - * @var Response - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - /** * @param Request $request * @param RequestHandlerInterface $handler @@ -34,7 +26,8 @@ class CoreMiddleware implements MiddlewareInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - $this->response->withHeaders(['Access-Control-Allow-Headers' => '*', 'Access-Control-Request-Method' => '*', 'Access-Control-Allow-Origin' => '*']); + $response = \Kiri::getDi()->get(ResponseInterface::class); + $response->withHeaders(['Access-Control-Allow-Headers' => '*', 'Access-Control-Request-Method' => '*', 'Access-Control-Allow-Origin' => '*']); return $handler->handle($request); } diff --git a/src/Base/Middleware.php b/src/Base/Middleware.php index 9637e44..91a4b07 100644 --- a/src/Base/Middleware.php +++ b/src/Base/Middleware.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Kiri\Router\Base; use Kiri; +use Kiri\Router\Validator\Validator; class Middleware { @@ -12,12 +13,11 @@ class Middleware /** * @var array */ - protected static array $manager = []; - - protected static array $mapping = []; + protected static array $validators = []; + /** * @param string $className * @param string $method @@ -47,4 +47,22 @@ class Middleware } + /** + * @param string $path + * @param array $validators + */ + public static function setValidator(string $path, array $validators): void + { + self::$validators[$path] = $validators; + } + + + /** + * @param string $path + * @return Validator|null + */ + public static function getValidator(string $path): ?Validator + { + return static::$validators[$path] ?? null; + } } diff --git a/src/ControllerInterpreter.php b/src/ControllerInterpreter.php index a5d30a6..a02642c 100644 --- a/src/ControllerInterpreter.php +++ b/src/ControllerInterpreter.php @@ -20,14 +20,6 @@ class ControllerInterpreter { - /** - * @param ContainerInterface $container - */ - public function __construct(public ContainerInterface $container) - { - } - - /** * @param object $class * @param string|ReflectionMethod $method @@ -38,7 +30,7 @@ class ControllerInterpreter public function addRouteByString(object $class, string|ReflectionMethod $method, ?ReflectionClass $reflection = null): Handler { if (is_null($reflection)) { - $reflection = $this->container->getReflectionClass($class::class); + $reflection = Kiri::getDi()->getReflectionClass($class::class); } return $this->resolveMethod($class, $method, $reflection); } @@ -71,7 +63,7 @@ class ControllerInterpreter public function addRouteByObject(object $class, string|ReflectionMethod $method, ?ReflectionClass $reflection = null): Handler { if (is_null($reflection)) { - $reflection = $this->container->getReflectionClass($class::class); + $reflection = Kiri::getDi()->getReflectionClass($class::class); } return $this->resolveMethod($class, $method, $reflection); } diff --git a/src/Format/ArrayFormat.php b/src/Format/ArrayFormat.php index 663a1af..f77b75c 100644 --- a/src/Format/ArrayFormat.php +++ b/src/Format/ArrayFormat.php @@ -9,21 +9,13 @@ use Psr\Http\Message\ResponseInterface; class ArrayFormat implements IFormat { - - /** - * @var ResponseInterface - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - /** * @param $result * @return ResponseInterface */ public function call($result): ResponseInterface { - return $this->response->withBody(new Stream(json_encode($result, JSON_UNESCAPED_UNICODE))); + return di(ResponseInterface::class)->withBody(new Stream(json_encode($result, JSON_UNESCAPED_UNICODE))); } diff --git a/src/Format/MixedFormat.php b/src/Format/MixedFormat.php index a78f602..ab69d92 100644 --- a/src/Format/MixedFormat.php +++ b/src/Format/MixedFormat.php @@ -2,22 +2,13 @@ namespace Kiri\Router\Format; -use Kiri\Di\Inject\Container; +use Kiri; use Kiri\Router\Constrict\Stream; -use Kiri\Router\ContentType; use Psr\Http\Message\ResponseInterface; class MixedFormat implements IFormat { - - /** - * @var ResponseInterface - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - /** * @param mixed $result * @return ResponseInterface @@ -27,13 +18,14 @@ class MixedFormat implements IFormat if ($result instanceof ResponseInterface) { return $result; } + $response = Kiri::getDi()->get(ResponseInterface::class); if (is_object($result)) { - return $this->response->withBody(new Stream('[object]')); + return $response->withBody(new Stream('[object]')); } if (is_array($result)) { - return $this->response->withBody(new Stream(json_encode($result, JSON_UNESCAPED_UNICODE))); + return $response->withBody(new Stream(json_encode($result, JSON_UNESCAPED_UNICODE))); } else { - return $this->response->withBody(new Stream((string)$result)); + return $response->withBody(new Stream((string)$result)); } } diff --git a/src/Format/NoBody.php b/src/Format/NoBody.php index 869d18a..5132d79 100644 --- a/src/Format/NoBody.php +++ b/src/Format/NoBody.php @@ -2,22 +2,13 @@ namespace Kiri\Router\Format; -use Kiri\Di\Inject\Container; +use Kiri; use Kiri\Router\Constrict\Stream; -use Kiri\Router\ContentType; use Psr\Http\Message\ResponseInterface; class NoBody implements IFormat { - - /** - * @var ResponseInterface - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - /** * @param $result * @return ResponseInterface @@ -25,19 +16,20 @@ class NoBody implements IFormat public function call($result): ResponseInterface { // TODO: Implement call() method. + $response = Kiri::getDi()->get(ResponseInterface::class); if (request()->getMethod() === 'HEAD') { - return $this->response->withBody(new Stream()); + return $response->withBody(new Stream()); } if ($result instanceof ResponseInterface) { return $result; } if (is_object($result)) { - return $this->response->withBody(new Stream('[object]')); + return $response->withBody(new Stream('[object]')); } if (is_array($result)) { - return $this->response->withBody(new Stream(json_encode($result, JSON_UNESCAPED_UNICODE))); + return $response->withBody(new Stream(json_encode($result, JSON_UNESCAPED_UNICODE))); } else { - return $this->response->withBody(new Stream((string)$result)); + return $response->withBody(new Stream((string)$result)); } } } \ No newline at end of file diff --git a/src/Format/OtherFormat.php b/src/Format/OtherFormat.php index 394dedc..7ea028b 100644 --- a/src/Format/OtherFormat.php +++ b/src/Format/OtherFormat.php @@ -9,21 +9,13 @@ use Psr\Http\Message\ResponseInterface; class OtherFormat implements IFormat { - - /** - * @var ResponseInterface - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - /** * @param mixed $result * @return ResponseInterface */ public function call(mixed $result): ResponseInterface { - return $this->response->withBody(new Stream($result)); + return di(ResponseInterface::class)->withBody(new Stream($result)); } diff --git a/src/Format/VoidFormat.php b/src/Format/VoidFormat.php index fc88572..8fbca32 100644 --- a/src/Format/VoidFormat.php +++ b/src/Format/VoidFormat.php @@ -8,15 +8,6 @@ use Psr\Http\Message\ResponseInterface; class VoidFormat implements IFormat { - - /** - * @var ResponseInterface - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - - /** * @param $result * @return ResponseInterface @@ -24,7 +15,7 @@ class VoidFormat implements IFormat public function call($result): ResponseInterface { // TODO: Implement call() method. - return $this->response; + return di(ResponseInterface::class); } } \ No newline at end of file diff --git a/src/Handler.php b/src/Handler.php index 5262934..f648d49 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -36,12 +36,6 @@ class Handler implements RequestHandlerInterface protected array $methods = []; - /** - * @var ContainerInterface - */ - protected ContainerInterface $container; - - /** * @param array|Closure $handler * @param array $parameters diff --git a/src/RouterCollector.php b/src/RouterCollector.php index 01199a3..6d8a68a 100644 --- a/src/RouterCollector.php +++ b/src/RouterCollector.php @@ -6,12 +6,10 @@ namespace Kiri\Router; use Closure; -use Kiri; use Kiri\Router\Base\NotFoundController; use Kiri\Router\Constrict\RequestMethod; use Kiri\Di\Inject\Container; use Psr\Container\ContainerInterface; -use ReflectionMethod; use Throwable; use Traversable; use Kiri\Router\Base\Middleware; @@ -61,20 +59,6 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate protected Handler $found; - /** - * @var ControllerInterpreter - */ - #[Container(ControllerInterpreter::class)] - public ControllerInterpreter $interpreter; - - - /** - * @var ContainerInterface - */ - #[Container(ContainerInterface::class)] - public ContainerInterface $container; - - /** * @throws */ @@ -133,11 +117,11 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate { try { $route = $this->_splicing_routing($route); -// if ($closure instanceof Closure) { -// $handler = $this->interpreter->addRouteByClosure($closure); -// } else { -// } - $handler = $this->resolve($closure, $this->interpreter); + if ($closure instanceof Closure) { + $handler = di(ControllerInterpreter::class)->addRouteByClosure($closure); + } else { + $handler = $this->resolve($closure, di(ControllerInterpreter::class)); + } foreach ($method as $value) { if ($value instanceof RequestMethod) { $value = $value->getString(); @@ -184,9 +168,10 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate */ private function resolve(string|array $closure, ControllerInterpreter $interpreter): Handler { + $container = \Kiri::getDi(); if (is_array($closure)) { if (is_string($closure[0])) { - $closure[0] = $this->container->get($closure[0]); + $closure[0] = $container->get($closure[0]); } return $interpreter->addRouteByString(... $closure); } @@ -194,7 +179,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate $closure .= '@'; } [$className, $method] = explode('@', $closure); - $class = $this->container->get($this->resetName($className)); + $class = $container->get($this->resetName($className)); return $interpreter->addRouteByString($class, $method); } diff --git a/src/SwooleHttpResponseEmitter.php b/src/SwooleHttpResponseEmitter.php index b614e68..e1d4c5e 100644 --- a/src/SwooleHttpResponseEmitter.php +++ b/src/SwooleHttpResponseEmitter.php @@ -35,12 +35,11 @@ class SwooleHttpResponseEmitter implements ResponseEmitterInterface /** * @param EventDispatch $dispatch - * @param EventProvider $provider */ - public function __construct(readonly public EventDispatch $dispatch, readonly public EventProvider $provider) + public function __construct(readonly public EventDispatch $dispatch) { $this->afterRequest = new OnAfterRequest(); - $this->events = $this->provider->getListenersForEvent($this->afterRequest); + $this->events = di(EventProvider::class)->getListenersForEvent($this->afterRequest); } diff --git a/src/SwowHttpResponseEmitter.php b/src/SwowHttpResponseEmitter.php index 546552d..fa18ce8 100644 --- a/src/SwowHttpResponseEmitter.php +++ b/src/SwowHttpResponseEmitter.php @@ -7,22 +7,12 @@ use Kiri\Di\Interface\ResponseEmitterInterface; use Kiri\Events\EventDispatch; use Kiri\Events\EventProvider; use Kiri\Server\Events\OnAfterRequest; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; use Psr\Http\Message\ResponseInterface; -use ReflectionException; use SplPriorityQueue; class SwowHttpResponseEmitter implements ResponseEmitterInterface { - /** - * @var EventProvider - */ - #[Container(EventProvider::class)] - public EventProvider $provider; - - /** * @var EventDispatch */ @@ -48,7 +38,7 @@ class SwowHttpResponseEmitter implements ResponseEmitterInterface public function init(): void { $this->afterRequest = new OnAfterRequest(); - $this->events = $this->provider->getListenersForEvent($this->afterRequest); + $this->events = di(EventProvider::class)->getListenersForEvent($this->afterRequest); } diff --git a/src/Validator/BindForm.php b/src/Validator/BindForm.php index 0889d1b..e56f77f 100644 --- a/src/Validator/BindForm.php +++ b/src/Validator/BindForm.php @@ -56,7 +56,8 @@ class BindForm implements InjectParameterInterface $middleware = \instance(ValidatorMiddleware::class); $middleware->validator = $validator; -// Middleware::set($class, $method, $middleware); + + Middleware::set($class, $method, $middleware); return $validator->getFormData(); } diff --git a/src/Validator/ValidatorMiddleware.php b/src/Validator/ValidatorMiddleware.php index ededb7b..4e6af06 100644 --- a/src/Validator/ValidatorMiddleware.php +++ b/src/Validator/ValidatorMiddleware.php @@ -3,7 +3,7 @@ declare(strict_types=1); namespace Kiri\Router\Validator; -use Kiri\Di\Inject\Container; +use Kiri\Router\Base\Middleware; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -16,16 +16,6 @@ class ValidatorMiddleware implements MiddlewareInterface { - public Validator $validator; - - - /** - * @var ResponseInterface - */ - #[Container(ResponseInterface::class)] - public ResponseInterface $response; - - /** * @param ServerRequestInterface $request * @param RequestHandlerInterface $handler @@ -34,8 +24,9 @@ class ValidatorMiddleware implements MiddlewareInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - if (!$this->validator->run($request)) { - return $this->response->html($this->validator->error(), 415); + $validator = Middleware::getValidator($request->getMethod() . '::' . $request->getUri()->getPath()); + if (!$validator->run($request)) { + return di(ResponseInterface::class)->html($validator->error(), 415); } else { return $handler->handle($request); }