diff --git a/Framework.code-workspace b/Framework.code-workspace index 2eb7d3e..02ddcba 100644 --- a/Framework.code-workspace +++ b/Framework.code-workspace @@ -5,7 +5,7 @@ } ], "settings": { - "workbench.colorTheme": "Dark Modern", + "workbench.colorTheme": "Monokai", "workbench.colorCustomizations": { "activityBar.background": "#162df7ec", "activityBar.foreground": "#000000", diff --git a/init.php b/init.php index fe48e22..b8b33c3 100644 --- a/init.php +++ b/init.php @@ -65,7 +65,7 @@ $host = 'localhost'; $root = __DIR__ . '/WEBROOT'; echo "\n🚀 Starte MVC Dev-Server auf http://$host:$port\n"; echo "Drücke STRG+C zum Beenden.\n\n"; -passthru("php -S $host:$port -t \"$root\""); +passthru("php -S $host:$port -t \"$root\" \"$root/index.php\""); PHP; $files['WEBROOT/logs/error.log'] = <<<'LOG' @@ -1173,14 +1173,24 @@ class Router { protected $routes = []; protected $middlewares = []; - public function add($service, $controller, $method, $middlewares = []) { + public function add($service, $controller, $method, $middlewares = [], $isApi = null) { + // Auto-detect API route if $isApi is not explicitly set + if ($isApi === null) { + $isApi = strpos($service, 'api/') === 0; + } + $this->routes[$service] = [ 'controller' => $controller, 'method' => $method, - 'middlewares' => $middlewares + 'middlewares' => $middlewares, + 'isApi' => $isApi ]; } + public function getRoute($service) { + return $this->routes[$service] ?? null; + } + public function dispatch($service) { if (!isset($this->routes[$service])) { throw new \Exception("Service '$service' not found."); @@ -2242,6 +2252,9 @@ $router->add('template_download', \MVC\Controller\TemplateController::class, 'do $router->add('template_form', \MVC\Controller\TemplateController::class, 'data_form', ['auth']); $router->add('template_table', \MVC\Controller\TemplateController::class, 'data_table', ['auth']); $router->add('download_file', \MVC\Controller\TemplateController::class, 'download_file', ['auth']); + +// API Routes (Path-based) +$router->add('api/v1/test', \MVC\Controller\ApiController::class, 'get'); PHP; // --- CONFIG: navigation.php --- @@ -2273,13 +2286,36 @@ require_once __DIR__ . '/src/MVC/autoloader.php'; use MVC\Classes\Logger; set_exception_handler([Logger::class, 'logException']); set_error_handler([Logger::class, 'logError']); -$service = $_GET['service'] ?? 'home'; + +// 1. Determine the service +$service = $_GET['service'] ?? null; + +// Fallback to path-based routing if no service parameter is given +if ($service === null) { + $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); + $service = trim($uri, '/'); + if (empty($service)) { + $service = 'home'; + } +} + try { $router = new \MVC\Core\Router(); // Load routes from config require_once __DIR__ . '/src/config/routes.php'; + // 2. Dispatch the service + $routeInfo = $router->getRoute($service); + $output = $router->dispatch($service); + + // 3. Conditional Layout Rendering + if ($routeInfo && !empty($routeInfo['isApi'])) { + // API Route: Just echo the output and exit + echo $output; + exit; + } + $layout = new \MVC\Layout\Layout('main'); $layout->setBlock('title', 'MVC Starter'); $layout->setBlock('header_title', '🚀 MVC Dashboard'); @@ -2321,7 +2357,7 @@ try { setBlock('sidebar', ob_get_clean()); - $layout->setBlock('content', $router->dispatch($service)); + $layout->setBlock('content', $output); echo $layout->render(); } catch (\Throwable $e) { Logger::logException($e);