/views) * - 默认自动转义(安全基线:XSS) * - 开发环境关闭编译缓存,生产开启(storage/cache/twig) * - 全局变量:app_name / base_url(模板生成链接,杜绝物理路径) */ final class View { private static ?Environment $twig = null; public static function render(string $template, array $data = []): string { return self::twig()->render($template, $data); } public static function twig(): Environment { if (self::$twig === null) { $cacheDir = Config::get('storage.cache', APP_ROOT . '/storage/cache') . '/twig'; $debug = (bool) Config::get('app.debug', false); $loader = new FilesystemLoader([ APP_ROOT . '/app/views', ]); self::$twig = new Environment($loader, [ 'cache' => $debug ? false : $cacheDir, 'autoescape' => 'html', 'charset' => 'UTF-8', 'strict_variables' => false, 'debug' => $debug, ]); self::$twig->addGlobal('app_name', Config::get('app.name', 'Glacier')); self::$twig->addGlobal('base_url', (string) Config::get('app.base_url', '')); } return self::$twig; } }