Actions structs
This commit is contained in:
parent
2780e16794
commit
b492d7cfc1
2 changed files with 20 additions and 18 deletions
|
|
@ -599,6 +599,7 @@ class App
|
||||||
$this->router->loadRoutesFromAnnotations(
|
$this->router->loadRoutesFromAnnotations(
|
||||||
[
|
[
|
||||||
APP_ROOT . '/src/Controllers',
|
APP_ROOT . '/src/Controllers',
|
||||||
|
APP_ROOT . '/src/Actions',
|
||||||
],
|
],
|
||||||
$appClass->getNamespaceName()
|
$appClass->getNamespaceName()
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -15,18 +15,16 @@ use Slim\App;
|
||||||
class Router
|
class Router
|
||||||
{
|
{
|
||||||
/** @var Route[] */
|
/** @var Route[] */
|
||||||
private array $routes = [];
|
protected array $routes = [];
|
||||||
private Logger $logger;
|
protected int $cacheTTL = 60;
|
||||||
private CachePoolChain $cachePoolChain;
|
|
||||||
private int $cacheTTL = 60;
|
|
||||||
|
|
||||||
private bool $routesArePopulated = false;
|
private bool $routesArePopulated = false;
|
||||||
|
|
||||||
public function __construct(Logger $logger, CachePoolChain $cachePoolChain)
|
public function __construct(
|
||||||
{
|
protected Logger $logger,
|
||||||
$this->logger = $logger;
|
protected CachePoolChain $cachePoolChain
|
||||||
$this->cachePoolChain = $cachePoolChain;
|
)
|
||||||
}
|
{}
|
||||||
|
|
||||||
public function loadRoutesFromAnnotations(
|
public function loadRoutesFromAnnotations(
|
||||||
array $controllerPaths,
|
array $controllerPaths,
|
||||||
|
|
@ -48,41 +46,44 @@ class Router
|
||||||
foreach ($phpFiles as $controllerFile) {
|
foreach ($phpFiles as $controllerFile) {
|
||||||
$fileClassName = ltrim(str_replace([$controllerPath, '/', '.php'], ['', '\\', ''], $controllerFile[0]), '\\');
|
$fileClassName = ltrim(str_replace([$controllerPath, '/', '.php'], ['', '\\', ''], $controllerFile[0]), '\\');
|
||||||
$expectedClasses = [
|
$expectedClasses = [
|
||||||
|
$baseNamespace . '\\Actions\\' . $fileClassName,
|
||||||
$baseNamespace . '\\Controllers\\' . $fileClassName,
|
$baseNamespace . '\\Controllers\\' . $fileClassName,
|
||||||
'Benzine\\Controllers\\' . $fileClassName,
|
'Benzine\\Controllers\\' . $fileClassName,
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($expectedClasses as $expectedClass) {
|
foreach ($expectedClasses as $expectedClass) {
|
||||||
if (!class_exists($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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$rc = new \ReflectionClass($expectedClass);
|
$rc = new \ReflectionClass($expectedClass);
|
||||||
if ($rc->isAbstract()) {
|
if ($rc->isAbstract()) {
|
||||||
|
$this->logger->warning("While loading routes from annotations in {file}, expected class {expectedClass} is abstract.", [
|
||||||
|
'file' => $controllerFile[0],
|
||||||
|
'expectedClass' => $expectedClass,
|
||||||
|
]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// \Kint::dump(
|
|
||||||
// $expectedClass,
|
|
||||||
// $rc
|
|
||||||
// );
|
|
||||||
|
|
||||||
foreach ($rc->getMethods() as $method) {
|
foreach ($rc->getMethods() as $method) {
|
||||||
if (!$method->isPublic()) {
|
if (!$method->isPublic()) {
|
||||||
|
// Non public methods can't have actions called on them
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$routeAnnotation = $reader->getMethodAnnotation($method, \Benzine\Annotations\Route::class);
|
$routeAnnotation = $reader->getMethodAnnotation($method, \Benzine\Annotations\Route::class);
|
||||||
if (!$routeAnnotation instanceof \Benzine\Annotations\Route) {
|
if (!$routeAnnotation instanceof \Benzine\Annotations\Route) {
|
||||||
|
// This isn't a route annotation. Somehow.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($routeAnnotation->methods as $httpMethod) {
|
foreach ($routeAnnotation->methods as $httpMethod) {
|
||||||
$newRoute = new Route();
|
|
||||||
|
|
||||||
// \Kint::dump($method);
|
$newRoute = (new Route())
|
||||||
// exit;
|
|
||||||
|
|
||||||
$newRoute
|
|
||||||
->setHttpMethod($httpMethod)
|
->setHttpMethod($httpMethod)
|
||||||
->setRouterPattern('/' . ltrim($routeAnnotation->path, '/'))
|
->setRouterPattern('/' . ltrim($routeAnnotation->path, '/'))
|
||||||
->setCallback($expectedClass . ':' . $method->name)
|
->setCallback($expectedClass . ':' . $method->name)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue