getTemplateDir()]); $this->environment = new Environment($loader); $this->kernel = $kernel; $this->addFunctions(); $this->addFilters(); } public function render(string $template, array $vars = []): string { return $this->environment->render($template, $vars); } public function addFunctions() { $path = new TwigFunction('path', function(string $route, array $params = []) { return $this->kernel->getRouter()->getUrlForRoute($route, $params); }); $this->environment->addExtension(new EntryFilesTwigExtension(new EntrypointLookup('./public/build/entrypoints.json'))); $this->environment->addFunction($path); } public function addFilters() { $secondsToInterval = new TwigFilter('interval', function(int $time) { $days = floor($time / (60 * 60 * 24)); $time -= $days * (60 * 60 * 24); $hours = floor($time / (60 * 60)); $time -= $hours * (60 * 60); $minutes = floor($time / 60); $time -= $minutes * 60; $seconds = floor($time); $time -= $seconds; return "{$days}d {$hours}h {$minutes}m {$seconds}s"; }); $this->environment->addFilter($secondsToInterval); } }