philippurbschat.de/philcore/core/Router.php

44 lines
No EOL
1.5 KiB
PHP

<?php
class Router {
protected $controller = 'HomeController';
protected $method = 'index';
protected $params = [];
public function route() {
$url = $this->parseUrl();
// Absoluter Pfad zu den Controllern (geht von core/ einen Ordner hoch und in app/controllers)
$controllerPath = __DIR__ . '/../app/controllers/';
// 1. Controller prüfen (z.B. /user/ -> UserController)
if (isset($url[0]) && file_exists($controllerPath . ucfirst($url[0]) . 'Controller.php')) {
$this->controller = ucfirst($url[0]) . 'Controller';
unset($url[0]);
}
require_once $controllerPath . $this->controller . '.php';
$this->controller = new $this->controller;
// 2. Methode prüfen (z.B. /user/edit -> Methode edit())
if (isset($url[1])) {
$candidateMethod = $url[1];
if (is_callable([$this->controller, $candidateMethod]) && strpos($candidateMethod, '_') !== 0) {
$this->method = $candidateMethod;
unset($url[1]);
}
}
// 3. Restliche Parameter sammeln
$this->params = $url ? array_values($url) : [];
// 4. Controller-Methode mit den Parametern aufrufen
call_user_func_array([$this->controller, $this->method], $this->params);
}
private function parseUrl() {
if (isset($_GET['url'])) {
return explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
return [];
}
}