From b492d7cfc10ec1e4673c326a512fa6cc2f2deb14 Mon Sep 17 00:00:00 2001 From: Matthew Baggett <matthew@baggett.me> Date: Sun, 14 Apr 2024 18:11:14 +0200 Subject: [PATCH] Actions structs --- src/App.php | 1 + src/Router/Router.php | 37 +++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/App.php b/src/App.php index c47e58c..61cbadb 100644 --- a/src/App.php +++ b/src/App.php @@ -599,6 +599,7 @@ class App $this->router->loadRoutesFromAnnotations( [ APP_ROOT . '/src/Controllers', + APP_ROOT . '/src/Actions', ], $appClass->getNamespaceName() ); diff --git a/src/Router/Router.php b/src/Router/Router.php index 06ce017..8be1e33 100644 --- a/src/Router/Router.php +++ b/src/Router/Router.php @@ -15,18 +15,16 @@ use Slim\App; class Router { /** @var Route[] */ - private array $routes = []; - private Logger $logger; - private CachePoolChain $cachePoolChain; - private int $cacheTTL = 60; + protected array $routes = []; + protected int $cacheTTL = 60; private bool $routesArePopulated = false; - public function __construct(Logger $logger, CachePoolChain $cachePoolChain) - { - $this->logger = $logger; - $this->cachePoolChain = $cachePoolChain; - } + public function __construct( + protected Logger $logger, + protected CachePoolChain $cachePoolChain + ) + {} public function loadRoutesFromAnnotations( array $controllerPaths, @@ -48,41 +46,44 @@ class Router foreach ($phpFiles as $controllerFile) { $fileClassName = ltrim(str_replace([$controllerPath, '/', '.php'], ['', '\\', ''], $controllerFile[0]), '\\'); $expectedClasses = [ + $baseNamespace . '\\Actions\\' . $fileClassName, $baseNamespace . '\\Controllers\\' . $fileClassName, 'Benzine\\Controllers\\' . $fileClassName, ]; foreach ($expectedClasses as $expectedClass) { if (!class_exists($expectedClass)) { + $this->logger->warning("While loading routes from annotations in {file}, expected class {expectedClass} does not exist.", [ + 'file' => $controllerFile[0], + 'expectedClass' => $expectedClass, + ]); continue; } $rc = new \ReflectionClass($expectedClass); if ($rc->isAbstract()) { + $this->logger->warning("While loading routes from annotations in {file}, expected class {expectedClass} is abstract.", [ + 'file' => $controllerFile[0], + 'expectedClass' => $expectedClass, + ]); continue; } - // \Kint::dump( - // $expectedClass, - // $rc - // ); foreach ($rc->getMethods() as $method) { if (!$method->isPublic()) { + // Non public methods can't have actions called on them continue; } $routeAnnotation = $reader->getMethodAnnotation($method, \Benzine\Annotations\Route::class); if (!$routeAnnotation instanceof \Benzine\Annotations\Route) { + // This isn't a route annotation. Somehow. continue; } foreach ($routeAnnotation->methods as $httpMethod) { - $newRoute = new Route(); - // \Kint::dump($method); - // exit; - - $newRoute + $newRoute = (new Route()) ->setHttpMethod($httpMethod) ->setRouterPattern('/' . ltrim($routeAnnotation->path, '/')) ->setCallback($expectedClass . ':' . $method->name)