middleware('auth', 'rate-limit') ->get(RoutePath::fromString('users'), 'UserController::index', 'api.users.index') ->post(RoutePath::fromString('users'), 'UserController::store', 'api.users.store') ->get(RoutePath::fromElements('users', Placeholder::fromString('id')), 'UserController::show', 'api.users.show') ->put(RoutePath::fromElements('users', Placeholder::fromString('id')), 'UserController::update', 'api.users.update') ->delete(RoutePath::fromElements('users', Placeholder::fromString('id')), 'UserController::destroy', 'api.users.destroy') ->build(); echo " ✅ Created API group with {$apiGroup->getRouteCount()} routes\n"; echo " 📍 Prefix: {$apiGroup->getPrefix()->toString()}\n"; echo " 🔧 Middleware: " . implode(', ', $apiGroup->getMiddleware()) . "\n"; echo " 🎯 Has dynamic routes: " . ($apiGroup->hasDynamicRoutes() ? 'Yes' : 'No') . "\n\n"; echo " 📋 Compiled routes with prefix applied:\n"; foreach ($apiGroup->getCompiledRoutes() as $route) { echo " • {$route->toString()}\n"; echo " Middleware: [" . implode(', ', $route->getMiddleware()) . "]\n"; } echo "\n"; } catch (\Throwable $e) { echo " ❌ Error: {$e->getMessage()}\n\n"; } echo "2. Creating admin route group with nested groups:\n"; try { $adminGroup = RouteGroup::prefix(RoutePath::fromString('admin')) ->middleware('admin-auth') ->get(RoutePath::fromString('dashboard'), 'AdminController::dashboard', 'admin.dashboard') ->group(RoutePath::fromString('users'), function($group) { $group->get(RoutePath::fromString('index'), 'AdminUserController::index', 'admin.users.index') ->post(RoutePath::fromString('create'), 'AdminUserController::store', 'admin.users.store') ->get(RoutePath::fromElements(Placeholder::fromString('id'), 'edit'), 'AdminUserController::edit', 'admin.users.edit'); }) ->group(RoutePath::fromString('settings'), function($group) { $group->get(RoutePath::fromString('general'), 'SettingsController::general', 'admin.settings.general') ->get(RoutePath::fromString('security'), 'SettingsController::security', 'admin.settings.security'); }) ->build(); echo " ✅ Created admin group with {$adminGroup->getRouteCount()} routes\n"; echo " 📍 Prefix: {$adminGroup->getPrefix()->toString()}\n\n"; echo " 📋 All compiled routes with nested prefixes:\n"; foreach ($adminGroup->getCompiledRoutes() as $route) { echo " • {$route->toString()}\n"; } echo "\n"; } catch (\Throwable $e) { echo " ❌ Error: {$e->getMessage()}\n\n"; } echo "3. Creating resource routes using helper methods:\n"; try { $resourceGroup = RouteGroup::prefix(RoutePath::fromString('api')) ->middleware('api-auth') ->resource('posts', 'PostController') ->apiResource('comments', 'CommentController') ->build(); echo " ✅ Created resource group with {$resourceGroup->getRouteCount()} routes\n"; echo " 📍 Prefix: {$resourceGroup->getPrefix()->toString()}\n\n"; echo " 📋 RESTful routes generated:\n"; foreach ($resourceGroup->getCompiledRoutes() as $route) { echo " • {$route->toString()}\n"; } echo "\n"; } catch (\Throwable $e) { echo " ❌ Error: {$e->getMessage()}\n\n"; } echo "4. Testing route group methods and utilities:\n"; try { $testGroup = RouteGroup::prefix(RoutePath::fromString('test')) ->get(RoutePath::fromString('static'), 'TestController::static') ->get(RoutePath::fromElements('dynamic', Placeholder::fromString('param')), 'TestController::dynamic') ->build(); echo " ✅ Created test group\n"; echo " 🔢 Route count: {$testGroup->getRouteCount()}\n"; echo " 🎯 Has dynamic routes: " . ($testGroup->hasDynamicRoutes() ? 'Yes' : 'No') . "\n"; echo " 📝 Group summary: {$testGroup->toString()}\n\n"; foreach ($testGroup->getRoutes() as $route) { echo " 📊 Route details:\n"; echo " Path: {$route->getPath()->toString()}\n"; echo " Method: {$route->getMethod()->value}\n"; echo " Handler: {$route->getHandler()}\n"; echo " Dynamic: " . ($route->isDynamic() ? 'Yes' : 'No') . "\n"; if ($route->isDynamic()) { echo " Parameters: " . implode(', ', $route->getParameterNames()) . "\n"; echo " Regex: {$route->toRegex()}\n"; } echo "\n"; } } catch (\Throwable $e) { echo " ❌ Error: {$e->getMessage()}\n\n"; } echo "5. Testing middleware inheritance and combination:\n"; try { $middlewareGroup = RouteGroup::prefix(RoutePath::fromString('secure')) ->middleware('global-middleware', 'auth-middleware') ->get(RoutePath::fromString('profile'), 'ProfileController::show') ->build() ->withMiddleware(['additional-middleware']); $compiledRoute = $middlewareGroup->getCompiledRoutes()[0]; echo " ✅ Created middleware test group\n"; echo " 🔧 Group middleware: [" . implode(', ', $middlewareGroup->getMiddleware()) . "]\n"; echo " 🔧 Route middleware: [" . implode(', ', $compiledRoute->getMiddleware()) . "]\n"; echo " 📍 Final route: {$compiledRoute->toString()}\n\n"; } catch (\Throwable $e) { echo " ❌ Error: {$e->getMessage()}\n\n"; } echo "=== Route Groups & Prefixes Test Completed ===\n";