This commit is contained in:
2026-07-03 14:48:04 +08:00
parent f9ac567bfe
commit d4a1e9c8d7
+42 -46
View File
@@ -82,16 +82,16 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
public function clear(): void public function clear(): void
{ {
$this->_item = []; $this->_item = [];
$this->dump = []; $this->dump = [];
$this->groupTack = []; $this->groupTack = [];
$this->methods = []; $this->methods = [];
$this->httpHandler = []; $this->httpHandler = [];
} }
/** /**
* @param string $method * @param string $method
* @param HttpRequestHandler $handler * @param HttpRequestHandler $handler
* @return void * @return void
*/ */
@@ -120,8 +120,8 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
/** /**
* @param array $method * @param array $method
* @param string $route * @param string $route
* @param string|array|Closure $closure * @param string|array|Closure $closure
*/ */
public function addRoute(array $method, string $route, string|array|Closure $closure): void public function addRoute(array $method, string $route, string|array|Closure $closure): void
@@ -164,7 +164,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
$array[] = [ $array[] = [
'path' => $path, 'path' => $path,
'method' => $method, 'method' => $method,
'handler' => $controller 'handler' => $controller,
]; ];
} }
return $array; return $array;
@@ -172,7 +172,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
/** /**
* @param string|array $closure * @param string|array $closure
* @param ControllerInterpreter $interpreter * @param ControllerInterpreter $interpreter
* @return Handler * @return Handler
* @throws * @throws
@@ -184,7 +184,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
if (is_string($closure[0])) { if (is_string($closure[0])) {
$closure[0] = $container->get($closure[0]); $closure[0] = $container->get($closure[0]);
} }
$handler = $interpreter->addRouteByString(... $closure); $handler = $interpreter->addRouteByString(... $closure);
$sourceFile = Router::getCurrentSourceFile(); $sourceFile = Router::getCurrentSourceFile();
if ($sourceFile !== null) { if ($sourceFile !== null) {
$handler->setSourceFile($sourceFile); $handler->setSourceFile($sourceFile);
@@ -196,8 +196,8 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
$closure .= '@'; $closure .= '@';
} }
[$className, $method] = explode('@', $closure); [$className, $method] = explode('@', $closure);
$class = $container->get($this->resetName($className)); $class = $container->get($this->resetName($className));
$handler = $interpreter->addRouteByString($class, $method); $handler = $interpreter->addRouteByString($class, $method);
$sourceFile = Router::getCurrentSourceFile(); $sourceFile = Router::getCurrentSourceFile();
if ($sourceFile !== null) { if ($sourceFile !== null) {
$handler->setSourceFile($sourceFile); $handler->setSourceFile($sourceFile);
@@ -222,8 +222,8 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
/** /**
* @param string $path * @param string $path
* @param string $method * @param string $method
* @param Handler $handler * @param Handler $handler
* @return void * @return void
* @throws * @throws
@@ -244,7 +244,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
public function exportArtifact(): array public function exportArtifact(): array
{ {
$entries = []; $entries = [];
$hasClosureRoutes = false; $hasClosureRoutes = false;
foreach ($this->methods as $methodPath => $handler) { foreach ($this->methods as $methodPath => $handler) {
@@ -254,28 +254,28 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
} }
[$requestMethod, $path] = explode('_', $methodPath, 2); [$requestMethod, $path] = explode('_', $methodPath, 2);
$class = $handler instanceof Handler ? $handler->getClass() : $handler->class; $class = $handler instanceof Handler ? $handler->getClass() : $handler->class;
$method = $handler instanceof Handler ? $handler->getMethod() : $handler->method; $method = $handler instanceof Handler ? $handler->getMethod() : $handler->method;
$middlewares = $handler instanceof Handler ? $handler->getMiddlewares() : $handler->middlewares; $middlewares = $handler instanceof Handler ? $handler->getMiddlewares() : $handler->middlewares;
$sourceFile = $handler instanceof Handler ? $handler->getSourceFile() : $handler->sourceFile; $sourceFile = $handler instanceof Handler ? $handler->getSourceFile() : $handler->sourceFile;
$sourceKind = $handler instanceof Handler ? $handler->getSourceKind() : $handler->sourceKind; $sourceKind = $handler instanceof Handler ? $handler->getSourceKind() : $handler->sourceKind;
$deferred = $handler instanceof Handler ? $this->serializeDeferred($handler->getDeferred()) : ($handler->deferred ?? []); $deferred = $handler instanceof Handler ? $this->serializeDeferred($handler->getDeferred()) : ($handler->deferred ?? []);
$entries[] = [ $entries[] = [
'request_method' => $requestMethod, 'request_method' => $requestMethod,
'path' => $path, 'path' => $path,
'class' => $class, 'class' => $class,
'method' => $method, 'method' => $method,
'middlewares' => $middlewares, 'middlewares' => $middlewares,
'source_file' => $sourceFile, 'source_file' => $sourceFile,
'source_kind' => $sourceKind, 'source_kind' => $sourceKind,
'deferred' => $deferred, 'deferred' => $deferred,
]; ];
} }
return [ return [
'has_closure_routes' => $hasClosureRoutes, 'has_closure_routes' => $hasClosureRoutes,
'entries' => $entries, 'entries' => $entries,
]; ];
} }
@@ -302,25 +302,21 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
continue; continue;
} }
$class = $entry['class'] ?? null; $class = $entry['class'] ?? null;
$method = $entry['method'] ?? null; $method = $entry['method'] ?? null;
$requestMethod = $entry['request_method'] ?? null; $requestMethod = $entry['request_method'] ?? null;
$path = $entry['path'] ?? null; $path = $entry['path'] ?? null;
if (!is_string($class) || !is_string($method) || !is_string($requestMethod) || !is_string($path)) { if (!is_string($class) || !is_string($method) || !is_string($requestMethod) || !is_string($path)) {
continue; continue;
} }
$this->methods[$requestMethod . '_' . $path] = new RouteEntry( $middlewares = is_array($entry['middlewares'] ?? null) ? $entry['middlewares'] : [];
requestMethod: $requestMethod, $sourceFile = is_string($sourceFile) ? $this->normalizePath($sourceFile) : null;
path: $path, $sourceKind = is_string($entry['source_kind'] ?? null) ? $entry['source_kind'] : 'attribute';
class: $class, $deferred = is_array($entry['deferred'] ?? null) ? $entry['deferred'] : [];
method: $method,
middlewares: is_array($entry['middlewares'] ?? null) ? $entry['middlewares'] : [], $this->methods[$requestMethod . '_' . $path] = new RouteEntry(requestMethod: $requestMethod, path: $path, class: $class, method: $method, middlewares: $middlewares, sourceFile: $sourceFile, sourceKind: $sourceKind, deferred: $deferred);
sourceFile: is_string($sourceFile) ? $this->normalizePath($sourceFile) : null,
sourceKind: is_string($entry['source_kind'] ?? null) ? $entry['source_kind'] : 'attribute',
deferred: is_array($entry['deferred'] ?? null) ? $entry['deferred'] : [],
);
} }
return true; return true;
@@ -348,7 +344,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
/** /**
* @param array $response * @param array $response
* @param string $class * @param string $class
* @param string $method * @param string $method
* @return array * @return array
@@ -379,8 +375,8 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
/** /**
* @param string $class * @param array $response
* @param string $method * @param array $middlewares
* @return Defer[] * @return Defer[]
*/ */
@@ -499,7 +495,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
{ {
if ($method instanceof RouteEntry) { if ($method instanceof RouteEntry) {
$controller = \Kiri::getDi()->get($method->class); $controller = \Kiri::getDi()->get($method->class);
$handler = di(ControllerInterpreter::class)->addRouteByString($controller, $method->method); $handler = di(ControllerInterpreter::class)->addRouteByString($controller, $method->method);
$handler->setRequestMethod($method->requestMethod); $handler->setRequestMethod($method->requestMethod);
$handler->setMiddlewares($method->middlewares); $handler->setMiddlewares($method->middlewares);
$handler->setSourceFile($method->sourceFile); $handler->setSourceFile($method->sourceFile);
@@ -514,7 +510,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
} }
$requestHandler = new HttpRequestHandler($middlewares, $method); $requestHandler = new HttpRequestHandler($middlewares, $method);
$validator = Middleware::getValidator($method->getClass(), $method->getMethod()); $validator = Middleware::getValidator($method->getClass(), $method->getMethod());
if ($validator !== null) { if ($validator !== null) {
$requestHandler->withValidatorMiddleware(new ValidatorMiddleware(di(\Psr\Http\Message\ResponseInterface::class), $method->getClass(), $method->getMethod())); $requestHandler->withValidatorMiddleware(new ValidatorMiddleware(di(\Psr\Http\Message\ResponseInterface::class), $method->getClass(), $method->getMethod()));
} }