Framework updates
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -297,6 +297,35 @@ class Dispatcher
|
||||
|
||||
Debugger::console_debug('DISPATCH', 'Matched route to ' . $handler_class . '::' . $handler_method . ' params: ' . json_encode($params));
|
||||
|
||||
// --- FPC Detection ---
|
||||
// Check if route has #[FPC] attribute and conditions are met for caching
|
||||
$has_fpc = false;
|
||||
try {
|
||||
$fpc_metadata = Manifest::php_get_metadata_by_fqcn($handler_class);
|
||||
$fpc_method_data = $fpc_metadata['public_static_methods'][$handler_method] ?? null;
|
||||
|
||||
if ($fpc_method_data && isset($fpc_method_data['attributes']['FPC'])) {
|
||||
// FPC only active for unauthenticated GET requests without POST/FILE data
|
||||
if ($route_method === 'GET' && empty($_POST) && empty($_FILES)) {
|
||||
\App\RSpade\Core\Session\Session::init();
|
||||
|
||||
if (!\App\RSpade\Core\Session\Session::is_logged_in()) {
|
||||
$has_fpc = true;
|
||||
|
||||
// Blank all cookies except session to prevent tainted output
|
||||
foreach ($_COOKIE as $key => $value) {
|
||||
if ($key !== 'rsx') {
|
||||
unset($_COOKIE[$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
console_debug('FPC', 'Metadata lookup failed: ' . $e->getMessage());
|
||||
}
|
||||
// --- End FPC Detection ---
|
||||
|
||||
// Set current controller and action in Rsx for tracking
|
||||
$route_type = $route_match['type'] ?? 'standard';
|
||||
\App\RSpade\Core\Rsx::_set_current_controller_action($handler_class, $handler_method, $params, $route_type);
|
||||
@@ -323,6 +352,12 @@ class Dispatcher
|
||||
// Convert result to response
|
||||
$response = static::__build_response($result);
|
||||
|
||||
// Add FPC header if conditions were met — signals the FPC proxy to cache this response
|
||||
if ($has_fpc && $response instanceof \Symfony\Component\HttpFoundation\Response) {
|
||||
$response->headers->set('X-RSpade-FPC', '1');
|
||||
$response->headers->remove('Set-Cookie');
|
||||
}
|
||||
|
||||
// Apply response transformations (HEAD body stripping, etc.)
|
||||
return static::__transform_response($response, $original_method);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user