eee
This commit is contained in:
+44
-3
@@ -6,6 +6,8 @@ namespace Kiri\Router;
|
||||
|
||||
|
||||
use Closure;
|
||||
use Kiri\Router\Annotate\Defer;
|
||||
use Kiri\Router\Annotate\DeferRegistry;
|
||||
use Kiri\Router\Base\NotFoundController;
|
||||
use Kiri\Router\Constrict\RequestMethod;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
@@ -236,6 +238,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
|
||||
|
||||
$this->methods[$method . '_' . $path] = $handler;
|
||||
$handler->setMiddlewares($this->registerMiddleware($handler->getClass(), $handler->getMethod()));
|
||||
$handler->setDeferred(DeferRegistry::get($handler->getClass(), $handler->getMethod()));
|
||||
}
|
||||
|
||||
|
||||
@@ -256,6 +259,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
|
||||
$middlewares = $handler instanceof Handler ? $handler->getMiddlewares() : $handler->middlewares;
|
||||
$sourceFile = $handler instanceof Handler ? $handler->getSourceFile() : $handler->sourceFile;
|
||||
$sourceKind = $handler instanceof Handler ? $handler->getSourceKind() : $handler->sourceKind;
|
||||
$deferred = $handler instanceof Handler ? $this->serializeDeferred($handler->getDeferred()) : ($handler->deferred ?? []);
|
||||
|
||||
$entries[] = [
|
||||
'request_method' => $requestMethod,
|
||||
@@ -265,6 +269,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
|
||||
'middlewares' => $middlewares,
|
||||
'source_file' => $sourceFile,
|
||||
'source_kind' => $sourceKind,
|
||||
'deferred' => $deferred,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -314,6 +319,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
|
||||
middlewares: is_array($entry['middlewares'] ?? null) ? $entry['middlewares'] : [],
|
||||
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'] : [],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -373,10 +379,11 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
|
||||
|
||||
|
||||
/**
|
||||
* @param array $response
|
||||
* @param array $middlewares
|
||||
* @return array
|
||||
* @param string $class
|
||||
* @param string $method
|
||||
* @return Defer[]
|
||||
*/
|
||||
|
||||
private function appendMiddleware(array $response, array $middlewares): array
|
||||
{
|
||||
foreach ($middlewares as $middleware) {
|
||||
@@ -448,6 +455,39 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Defer[] $deferred
|
||||
* @return array
|
||||
*/
|
||||
private function serializeDeferred(array $deferred): array
|
||||
{
|
||||
$result = [];
|
||||
foreach ($deferred as $defer) {
|
||||
$result[] = [
|
||||
'callback' => $defer->callback,
|
||||
'params' => $defer->params,
|
||||
];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return Defer[]
|
||||
*/
|
||||
private function deserializeDeferred(array $data): array
|
||||
{
|
||||
$result = [];
|
||||
foreach ($data as $item) {
|
||||
if (isset($item['callback'])) {
|
||||
$result[] = new Defer($item['callback'], $item['params'] ?? []);
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
private function normalizePath(string $path): string
|
||||
{
|
||||
$resolved = realpath($path) ?: $path;
|
||||
@@ -464,6 +504,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate
|
||||
$handler->setMiddlewares($method->middlewares);
|
||||
$handler->setSourceFile($method->sourceFile);
|
||||
$handler->setSourceKind($method->sourceKind);
|
||||
$handler->setDeferred($this->deserializeDeferred($method->deferred));
|
||||
$method = $handler;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user