diff --git a/http-handler/Abstracts/Handler.php b/http-handler/Abstracts/Handler.php index 5a4c1d14..a9f72ac9 100644 --- a/http-handler/Abstracts/Handler.php +++ b/http-handler/Abstracts/Handler.php @@ -102,10 +102,10 @@ abstract class Handler implements RequestHandlerInterface if (!$interface->hasContentType()) { $interface->withContentType('application/json;charset=utf-8'); } - if (is_object($responseData)) { - $responseData = get_object_vars($responseData); - } if (str_contains($interface->getContentType(), 'xml')) { + if (is_object($responseData)) { + $responseData = get_object_vars($responseData); + } $interface->getBody()->write(Help::toXml($responseData)); } else if (is_array($responseData)) { $interface->getBody()->write(json_encode($responseData)); diff --git a/http-handler/Abstracts/MiddlewareManager.php b/http-handler/Abstracts/MiddlewareManager.php index afe136eb..ef82a1fb 100644 --- a/http-handler/Abstracts/MiddlewareManager.php +++ b/http-handler/Abstracts/MiddlewareManager.php @@ -38,28 +38,33 @@ class MiddlewareManager extends BaseObject if (is_string($middlewares)) { $middlewares = [$middlewares]; } - $source = static::$_middlewares[$class][$method]; + $source = &static::$_middlewares[$class][$method]; foreach ($middlewares as $middleware) { - if (isset($source[$middleware])) { + $middleware = di($middleware); + if (!in_array($middleware, $source)) { continue; } - $source[$middleware] = di($middleware); + $source[] = $middleware; } return true; } + /** + * @param $class + * @param $method + * @return array + */ private static function setDefault($class, $method): array { if (is_object($class)) { $class = $class::class; } - if (!isset(static::$_middlewares[$class])) { static::$_middlewares[$class] = []; } if (!isset(static::$_middlewares[$class][$method])) { - static::$_middlewares[$class][$method] = new Iterator(); + static::$_middlewares[$class][$method] = []; } return [$class, $method]; } @@ -69,12 +74,12 @@ class MiddlewareManager extends BaseObject * @param $handler * @return Iterator|null */ - public static function get($handler): ?Iterator + public static function get($handler): ?array { if (!($handler instanceof Closure)) { return static::$_middlewares[$handler[0]][$handler[1]] ?? null; } - return di(Iterator::class); + return null; } diff --git a/http-server/Service/Http.php b/http-server/Service/Http.php index 6ac68e20..b8807cb0 100644 --- a/http-server/Service/Http.php +++ b/http-server/Service/Http.php @@ -47,10 +47,6 @@ class Http implements OnCloseInterface, OnConnectInterface, OnRequestInterface public Router $router; - #[Inject(Dispatcher::class)] - public Dispatcher $dispatcher; - - /** * @var ExceptionHandlerInterface */ @@ -118,11 +114,8 @@ class Http implements OnCloseInterface, OnConnectInterface, OnRequestInterface protected function handler(Handler $handler, $PsrRequest): \Psr\Http\Message\ResponseInterface { $middlewares = MiddlewareManager::get($handler->callback); - $this->dispatcher->setHandler($handler); - if (!empty($middlewares)) { - $this->dispatcher->setMiddlewares($middlewares); - } - return $this->dispatcher->handle($PsrRequest); + $dispatcher = new Dispatcher($handler, $middlewares); + return $dispatcher->handle($PsrRequest); }