%PDF- %PDF-
Direktori : /www/varak.net/losik.varak.net/vendor/nette/application/src/Bridges/ApplicationLatte/ |
Current File : //www/varak.net/losik.varak.net/vendor/nette/application/src/Bridges/ApplicationLatte/Template.php |
<?php /** * This file is part of the Nette Framework (https://nette.org) * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare(strict_types=1); namespace Nette\Bridges\ApplicationLatte; use Latte; use Nette; /** * Latte powered template. */ class Template implements Nette\Application\UI\Template { /** @var Latte\Engine */ private $latte; /** @var string */ private $file; public function __construct(Latte\Engine $latte) { $this->latte = $latte; } final public function getLatte(): Latte\Engine { return $this->latte; } /** * Renders template to output. */ public function render(?string $file = null, array $params = []): void { Nette\Utils\Arrays::toObject($params, $this); $this->latte->render($file ?: $this->file, $this); } /** * Renders template to output. */ public function renderToString(?string $file = null, array $params = []): string { Nette\Utils\Arrays::toObject($params, $this); return $this->latte->renderToString($file ?: $this->file, $this); } /** * Renders template to string. * @param can throw exceptions? (hidden parameter) */ public function __toString(): string { try { return $this->latte->renderToString($this->file, $this->getParameters()); } catch (\Throwable $e) { if (func_num_args() || PHP_VERSION_ID >= 70400) { throw $e; } trigger_error('Exception in ' . __METHOD__ . "(): {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", E_USER_ERROR); return ''; } } /********************* template filters & helpers ****************d*g**/ /** * Registers run-time filter. * @return static */ public function addFilter(?string $name, callable $callback) { $this->latte->addFilter($name, $callback); return $this; } /** * Registers run-time function. * @return static */ public function addFunction(string $name, callable $callback) { $this->latte->addFunction($name, $callback); return $this; } /** * Sets translate adapter. * @return static */ public function setTranslator(?Nette\Localization\Translator $translator, ?string $language = null) { if (version_compare(Latte\Engine::VERSION, '3', '<')) { $this->latte->addFilter( 'translate', function (Latte\Runtime\FilterInfo $fi, ...$args) use ($translator): string { return $translator === null ? $args[0] : $translator->translate(...$args); } ); } else { $this->latte->addExtension(new Latte\Essential\TranslatorExtension($translator, $language)); } return $this; } /********************* template parameters ****************d*g**/ /** * Sets the path to the template file. * @return static */ public function setFile(string $file) { $this->file = $file; return $this; } final public function getFile(): ?string { return $this->file; } /** * Returns array of all parameters. */ final public function getParameters(): array { $res = []; foreach ((new \ReflectionObject($this))->getProperties(\ReflectionProperty::IS_PUBLIC) as $prop) { if (PHP_VERSION_ID < 70400 || $prop->isInitialized($this)) { $res[$prop->getName()] = $prop->getValue($this); } } return $res; } /** * Prevents unserialization. */ final public function __wakeup() { throw new Nette\NotImplementedException('Object unserialization is not supported by class ' . static::class); } }