diff --git a/Annotation/Aspect.php b/Annotation/Aspect.php index 1af30b5c..693ef5a6 100644 --- a/Annotation/Aspect.php +++ b/Annotation/Aspect.php @@ -34,13 +34,13 @@ defined('ASPECT_ERROR') or define('ASPECT_ERROR', 'Aspect annotation must implem public function execute(mixed $class, mixed $method = ''): bool { // TODO: Change the autogenerated stub - if (!in_array(IAspect::class, class_implements($this->aspect))) { - throw new Exception(ASPECT_ERROR . IAspect::class); - } - /** @var Aop $aop */ - $aop = Snowflake::getDi()->get(Aop::class); - - $aop->aop_add([$class, $method], $this->aspect); +// if (!in_array(IAspect::class, class_implements($this->aspect))) { +// throw new Exception(ASPECT_ERROR . IAspect::class); +// } +// /** @var Aop $aop */ +// $aop = Snowflake::getDi()->get(Aop::class); +// +// $aop->aop_add([$class, $method], $this->aspect); return true; } diff --git a/HttpServer/Route/Node.php b/HttpServer/Route/Node.php index 9b0f6afe..380460b8 100644 --- a/HttpServer/Route/Node.php +++ b/HttpServer/Route/Node.php @@ -12,7 +12,6 @@ use HttpServer\Abstracts\HttpService; use HttpServer\Http\Request; use JetBrains\PhpStorm\Pure; use ReflectionException; -use Snowflake\Aop; use Snowflake\Core\Json; use Snowflake\Exception\NotFindClassException; use Snowflake\IAspect; @@ -120,14 +119,14 @@ class Node extends HttpService $manager = di(MiddlewareManager::class); if ($this->handler instanceof Closure) { if (!empty($this->middleware)) { - $this->callback = $manager->closureMiddlewares($this->middleware, $this->createDispatch()); + $this->callback = $manager->closureMiddlewares($this->middleware, $this->normalHandler($this->handler)); } else { - $this->callback = $this->createDispatch(); + $this->callback = $this->normalHandler($this->handler); } } else { $manager->addMiddlewares($this->handler[0], $this->handler[1], $this->middleware); $this->callback = $manager->callerMiddlewares( - $this->handler[0], $this->handler[1], $this->createDispatch() + $this->handler[0], $this->handler[1], $this->aopHandler($this->getAop()) ); } return $this; @@ -157,26 +156,10 @@ class Node extends HttpService /** - * @throws ReflectionException - * @throws Exception - */ - private function createDispatch(): Closure - { - /** @var Aop $aop */ - $aop = Snowflake::getDi()->get(Aop::class); - if ($this->handler instanceof Closure || !$aop->hasAop($this->handler)) { - return $this->normalHandler($this->handler); - } else { - return $this->aopHandler($aop->getAop($this->handler)); - } - } - - - /** - * @param IAspect $reflect + * @param IAspect|null $reflect * @return Closure */ - private function aopHandler(IAspect $reflect): Closure + private function aopHandler(?IAspect $reflect): Closure { $params = $this->_injectParameters; $handler = $this->handler; @@ -186,6 +169,26 @@ class Node extends HttpService } + /** + * @throws ReflectionException + */ + private function getAop(): ?IAspect + { + [$controller, $action] = $this->handler; + + $aspect = Snowflake::getDi()->getMethodAttribute($controller::class, $action); + if (empty($aspect)) { + return null; + } + foreach ($aspect as $value) { + if ($value instanceof IAspect) { + return $value; + } + } + return null; + } + + /** * @param $handler * @return Closure diff --git a/System/Aop.php b/System/Aop.php index d15d5805..b4be31a2 100644 --- a/System/Aop.php +++ b/System/Aop.php @@ -33,7 +33,6 @@ class Aop extends Component if (!isset(static::$_aop[$alias])) { static::$_aop[$alias] = []; } - var_dump('add ' . $alias); if (in_array($aspect, static::$_aop[$alias])) { return; } @@ -47,7 +46,6 @@ class Aop extends Component */ public function hasAop($handler): bool { - var_dump('check ' . $handler[0]::class . '::' . $handler[1]); return isset(static::$_aop[$handler[0]::class . '::' . $handler[1]]); }