Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions src/Bridges/ApplicationLatte/Template.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

use Latte;
use Nette;
use function get_object_vars, is_array;


/**
Expand All @@ -33,23 +34,23 @@ final public function getLatte(): Latte\Engine

/**
* Renders template to output.
* @param array<string, mixed> $params
* @param object|array<string, mixed> $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);
}


/**
* Renders template to string.
* @param array<string, mixed> $params
* @param object|array<string, mixed> $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);
}
Expand Down
32 changes: 32 additions & 0 deletions tests/Bridges.Latte/Template.render.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php declare(strict_types=1);

/**
* Test: Template rendering with object parameters
*/

use Nette\Bridges\ApplicationLatte\DefaultTemplate;
use Tester\Assert;

require __DIR__ . '/../bootstrap.php';


function createTemplate(): DefaultTemplate
{
$latte = new Latte\Engine;
$latte->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']));
});
2 changes: 1 addition & 1 deletion tests/Bridges.Latte/TemplateFactory.customTemplate.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down