Use Twig-only rendering and improve error fallback
Remove legacy PHP view fallbacks and always render Twig templates (Controller, Router). Update ErrorHandler to attempt Twig rendering and provide a safe, escaped minimal HTML fallback on failure instead of requiring PHP views. Also pass whoisData into the domain view. These changes standardize on Twig templates and harden error output.
This commit is contained in:
@@ -844,6 +844,7 @@ class DomainController extends Controller
|
|||||||
|
|
||||||
$this->view('domains/view', [
|
$this->view('domains/view', [
|
||||||
'domain' => $formattedDomain,
|
'domain' => $formattedDomain,
|
||||||
|
'whoisData' => $whoisData,
|
||||||
'logs' => $logs,
|
'logs' => $logs,
|
||||||
'availableTags' => $availableTags,
|
'availableTags' => $availableTags,
|
||||||
'title' => $domain['domain_name']
|
'title' => $domain['domain_name']
|
||||||
|
|||||||
@@ -296,33 +296,28 @@ class ErrorHandler
|
|||||||
$request_data = json_decode($errorData['request_data'], true);
|
$request_data = json_decode($errorData['request_data'], true);
|
||||||
$session_data = json_decode($errorData['session_data'], true);
|
$session_data = json_decode($errorData['session_data'], true);
|
||||||
|
|
||||||
// Display debug page in development, clean 500 in production
|
|
||||||
$twigTemplate = $this->isDevelopment ? 'errors/debug.twig' : 'errors/500.twig';
|
$twigTemplate = $this->isDevelopment ? 'errors/debug.twig' : 'errors/500.twig';
|
||||||
$twigFile = __DIR__ . '/../Views/' . $twigTemplate;
|
|
||||||
|
|
||||||
if (file_exists($twigFile)) {
|
try {
|
||||||
try {
|
$memory_usage_mb = round(($memory_usage ?? 0) / 1024 / 1024, 2);
|
||||||
$memory_usage_mb = round(($memory_usage ?? 0) / 1024 / 1024, 2);
|
$peak_memory_mb = round(memory_get_peak_usage(true) / 1024 / 1024, 2);
|
||||||
$peak_memory_mb = round(memory_get_peak_usage(true) / 1024 / 1024, 2);
|
$errorContext = compact(
|
||||||
$errorContext = compact(
|
'error_id', 'error_type', 'error_message', 'error_file', 'error_line',
|
||||||
'error_id', 'error_type', 'error_message', 'error_file', 'error_line',
|
'stack_trace', 'request_method', 'request_uri', 'user_agent',
|
||||||
'stack_trace', 'request_method', 'request_uri', 'user_agent',
|
'ip_address', 'php_version', 'memory_usage', 'memory_usage_mb',
|
||||||
'ip_address', 'php_version', 'memory_usage', 'memory_usage_mb',
|
'peak_memory_mb', 'occurred_at', 'user_info', 'request_data', 'session_data'
|
||||||
'peak_memory_mb', 'occurred_at', 'user_info', 'request_data', 'session_data'
|
);
|
||||||
);
|
echo \Core\TwigService::getInstance()->render($twigTemplate, $errorContext);
|
||||||
echo \Core\TwigService::getInstance()->render($twigTemplate, $errorContext);
|
} catch (\Throwable $e) {
|
||||||
} catch (\Throwable $e) {
|
$safeId = htmlspecialchars($error_id, ENT_QUOTES, 'UTF-8');
|
||||||
// Twig itself failed — fall back to raw PHP view
|
if ($this->isDevelopment) {
|
||||||
if ($this->isDevelopment) {
|
$safeMsg = htmlspecialchars($error_message, ENT_QUOTES, 'UTF-8');
|
||||||
require __DIR__ . '/../Views/errors/debug.php';
|
$safeFile = htmlspecialchars($error_file, ENT_QUOTES, 'UTF-8');
|
||||||
} else {
|
echo "<h1>Internal Server Error</h1><p><strong>ID:</strong> {$safeId}</p>"
|
||||||
require __DIR__ . '/../Views/errors/500.php';
|
. "<p>{$safeMsg} in {$safeFile}:{$error_line}</p>";
|
||||||
}
|
} else {
|
||||||
|
echo "<h1>Internal Server Error</h1><p>Reference: {$safeId}</p>";
|
||||||
}
|
}
|
||||||
} elseif ($this->isDevelopment) {
|
|
||||||
require __DIR__ . '/../Views/errors/debug.php';
|
|
||||||
} else {
|
|
||||||
require __DIR__ . '/../Views/errors/500.php';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
@@ -6,23 +6,8 @@ abstract class Controller
|
|||||||
{
|
{
|
||||||
protected function view(string $view, array $data = []): void
|
protected function view(string $view, array $data = []): void
|
||||||
{
|
{
|
||||||
$twigPath = __DIR__ . "/../app/Views/$view.twig";
|
$twig = TwigService::getInstance();
|
||||||
|
echo $twig->render("$view.twig", $data);
|
||||||
if (file_exists($twigPath)) {
|
|
||||||
$twig = TwigService::getInstance();
|
|
||||||
echo $twig->render("$view.twig", $data);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fallback to legacy PHP view during migration
|
|
||||||
extract($data);
|
|
||||||
$viewPath = __DIR__ . "/../app/Views/$view.php";
|
|
||||||
|
|
||||||
if (!file_exists($viewPath)) {
|
|
||||||
throw new \Exception("View not found: $view");
|
|
||||||
}
|
|
||||||
|
|
||||||
require $viewPath;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function json($data, int $status = 200): void
|
protected function json($data, int $status = 200): void
|
||||||
|
|||||||
@@ -72,12 +72,7 @@ class Router
|
|||||||
// Silently fail if logging is not available
|
// Silently fail if logging is not available
|
||||||
}
|
}
|
||||||
|
|
||||||
$twigPath = __DIR__ . '/../app/Views/errors/404.twig';
|
echo TwigService::getInstance()->render('errors/404.twig');
|
||||||
if (file_exists($twigPath)) {
|
|
||||||
echo TwigService::getInstance()->render('errors/404.twig');
|
|
||||||
} else {
|
|
||||||
require_once __DIR__ . '/../app/Views/errors/404.php';
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user