app/classes/ReleaseInsights/Template.php (39 lines of code) (raw):

<?php declare(strict_types=1); namespace ReleaseInsights; use Twig\Environment; use Twig\Extra\Intl\IntlExtension; use Twig\Loader\FilesystemLoader; class Template { public string|bool $template_caching; /** * @param array<mixed> $data */ public function __construct(public string $template, public array $data) { // Cache compiled templates on production in a twig folder (10x difference) $this->template_caching = PRODUCTION ? CACHE_PATH . 'twig/' : false; // @codeCoverageIgnoreStart // Pass extra variables to template in local dev mode if (LOCALHOST && !defined('TESTING_CONTEXT')) { $this->data += [ 'branch' => trim((string) shell_exec('git rev-parse --abbrev-ref HEAD')), ]; } // @codeCoverageIgnoreEnd } /** * @codeCoverageIgnore */ public function render(): void { // Initialize our Templating system $twig_loader = new FilesystemLoader(INSTALL_ROOT . 'app/views/templates'); // @codeCoverageIgnoreStart // Allow Twig debug mode in local dev mode if (LOCALHOST && !defined('TESTING_CONTEXT')) { $twig = new Environment( $twig_loader, [ 'cache' => $this->template_caching, 'debug' => true, 'auto_reload' => true, ] ); $twig->addExtension(new \Twig\Extension\DebugExtension()); } else { $twig = new Environment($twig_loader, ['cache' => $this->template_caching,]); } // @codeCoverageIgnoreEnd $twig->addExtension(new IntlExtension()); echo $twig->render($this->template, $this->data); die; } }