$handler) { // Convert route pattern to regex // First, replace route parameter patterns before quoting $patternForRegex = preg_replace('/\(\d+\)/', '(\d+)', $pattern); $patternForRegex = preg_replace('/\(\w+\)/', '([^\/]+)', $patternForRegex); $regex = '#^' . $patternForRegex . '$#'; if (preg_match($regex, $uri, $matches)) { // Remove first match (full match) array_shift($matches); // Parse handler list($controllerName, $actionName) = explode('@', $handler); // Instantiate controller $controllerClass = 'App\\Controllers\\' . $controllerName; if (class_exists($controllerClass)) { $controller = new $controllerClass(); // Call action with parameters if (method_exists($controller, $actionName)) { call_user_func_array([$controller, $actionName], $matches); $matched = true; break; } } } } // Handle 404 if (!$matched) { http_response_code(404); // Show a simple 404 page echo ''; echo ''; echo '