getTempDir('twig'); /* Twig expects false when cache is not configured */ if (is_null($cache_dir)) { $cache_dir = false; } $twig = new Environment($loader, [ 'auto_reload' => true, 'cache' => $cache_dir, 'debug' => false, ]); $twig->addExtension(new CharsetsExtension()); $twig->addExtension(new CoreExtension()); $twig->addExtension(new I18nExtension()); $twig->addExtension(new MessageExtension()); $twig->addExtension(new PluginsExtension()); $twig->addExtension(new RelationExtension()); $twig->addExtension(new SanitizeExtension()); $twig->addExtension(new ServerPrivilegesExtension()); $twig->addExtension(new StorageEngineExtension()); $twig->addExtension(new TrackerExtension()); $twig->addExtension(new TableExtension()); $twig->addExtension(new TransformationsExtension()); $twig->addExtension(new UrlExtension()); $twig->addExtension(new UtilExtension()); $this::$twig = $twig; } } /** * Loads a template. * * @param string $templateName Template path name * * @return \Twig_TemplateWrapper */ public function load(string $templateName): \Twig_TemplateWrapper { try { $template = $this::$twig->load($templateName . '.twig'); } catch (\RuntimeException $e) { /* Retry with disabled cache */ $this::$twig->setCache(false); $template = $this::$twig->load($templateName . '.twig'); /* * The trigger error is intentionally after second load * to avoid triggering error when disabling cache does not * solve it. */ trigger_error( sprintf( __('Error while working with template cache: %s'), $e->getMessage() ), E_USER_WARNING ); } return $template; } /** * @param string $template Template path name * @param array $data Associative array of template variables * * @return string */ public function render(string $template, array $data = []): string { return $this->load($template)->render($data); } }