borisbaer: Was gibt es beim Schreiben eines PHP-Routers zu beachten?

Beitrag lesen

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