diff --git a/src/Bridges/ApplicationLatte/Template.php b/src/Bridges/ApplicationLatte/Template.php index 32378c9e0..82f3672d3 100644 --- a/src/Bridges/ApplicationLatte/Template.php +++ b/src/Bridges/ApplicationLatte/Template.php @@ -9,6 +9,7 @@ use Latte; use Nette; +use function get_object_vars, is_array; /** @@ -33,11 +34,11 @@ final public function getLatte(): Latte\Engine /** * Renders template to output. - * @param array $params + * @param object|array $params */ - public function render(?string $file = null, array $params = []): void + public function render(?string $file = null, object|array $params = []): void { - Nette\Utils\Arrays::toObject($params, $this); + Nette\Utils\Arrays::toObject(is_array($params) ? $params : get_object_vars($params), $this); $file ??= $this->file ?? throw new Nette\InvalidStateException('Template file name was not set.'); $this->latte->render($file, $this); } @@ -45,11 +46,11 @@ public function render(?string $file = null, array $params = []): void /** * Renders template to string. - * @param array $params + * @param object|array $params */ - public function renderToString(?string $file = null, array $params = []): string + public function renderToString(?string $file = null, object|array $params = []): string { - Nette\Utils\Arrays::toObject($params, $this); + Nette\Utils\Arrays::toObject(is_array($params) ? $params : get_object_vars($params), $this); $file ??= $this->file ?? throw new Nette\InvalidStateException('Template file name was not set.'); return $this->latte->renderToString($file, $this); } diff --git a/tests/Bridges.Latte/Template.render.phpt b/tests/Bridges.Latte/Template.render.phpt new file mode 100644 index 000000000..b4ecb5ba7 --- /dev/null +++ b/tests/Bridges.Latte/Template.render.phpt @@ -0,0 +1,32 @@ +setLoader(new Latte\Loaders\StringLoader); + return new DefaultTemplate($latte); +} + + +test('render accepts object parameters', function () { + $template = createTemplate(); + ob_start(); + $template->render('{$message}', (object) ['message' => 'Hello']); + Assert::same('Hello', ob_get_clean()); +}); + + +test('renderToString accepts object parameters', function () { + $template = createTemplate(); + Assert::same('Hello', $template->renderToString('{$message}', (object) ['message' => 'Hello'])); +}); diff --git a/tests/Bridges.Latte/TemplateFactory.customTemplate.phpt b/tests/Bridges.Latte/TemplateFactory.customTemplate.phpt index b1309c5e3..84ffaf9e0 100644 --- a/tests/Bridges.Latte/TemplateFactory.customTemplate.phpt +++ b/tests/Bridges.Latte/TemplateFactory.customTemplate.phpt @@ -20,7 +20,7 @@ class TemplateMock extends Template private string $file = 'ko'; - public function render(?string $file = null, array $params = []): void + public function render(?string $file = null, object|array $params = []): void { echo strrev($this->file); }