Hallo Rolf,
class UserController { #[Route(action:"edit", method:"get")] public function get_edit($id) { } #[Route(action:"edit", method:"post")] public function post_edit($id) { } }
ich habe Folgendes mit den Attributen umsetzen können umsetzen können:
public function addRoute( string $httpMethod, string $route, callable|array $handler ): self
{
$this -> routes[$httpMethod][$route] = $handler;
return $this;
}
public function addRouteByAttribute( array $controllers )
{
foreach( $controllers as $controller ) {
$reflector = new \ReflectionClass( $controller );
foreach( $reflector -> getMethods() as $method ) {
$attributes = $method -> getAttributes( \Core\Attributes\Router::class, \ReflectionAttribute::IS_INSTANCEOF );
foreach( $attributes as $attribute ) {
$route = $attribute -> newInstance();
$this -> addRoute( $route -> httpMethod, $route -> route, [ $controller, $method -> getName() ] );
}
}
}
}
In der index.php steht dann nur noch:
$router = new \Core\Router();
$router -> addRouteByAttribute( [
Home::class,
Games::class,
Consoles::class,
Form::class,
] );
Und letztlich im Controller:
class Home {
#[ GET( '/' ) ]
public function index(): View
{
return View::instantiate( 'home', [
'name' => 'Benutzer',
'colors' => [ 'rot', 'grün', 'blau' ]
] );
}
}
Hast du das ungefähr so gemeint?
Grüße
Boris