From e1f6e1ba6da24a8e1b45db993478c042e8e324cc Mon Sep 17 00:00:00 2001 From: Jakub Duchek Date: Thu, 5 Mar 2026 16:22:52 +0100 Subject: [PATCH 1/2] fix: Template::render() accepts object for template parameters (#351) Latte\Engine::render() supports passing an object as template parameters, but Nette\Bridges\ApplicationLatte\Template::render() only accepted arrays. This adds object|array union type to render() and renderToString(). --- src/Bridges/ApplicationLatte/Template.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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); } From e0111be129575dbbf326e837ac2adba6ded4c9b9 Mon Sep 17 00:00:00 2001 From: Jakub Duchek Date: Fri, 11 Sep 2026 11:47:42 +0200 Subject: [PATCH 2/2] fixed object template parameter tests --- tests/Bridges.Latte/Template.render.phpt | 32 +++++++++++++++++++ .../TemplateFactory.customTemplate.phpt | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tests/Bridges.Latte/Template.render.phpt 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); }