Jak předat parametry do šablony jako třídu ??
- m.brecher
- Generous Backer | 864
Ahoj,
rád bych využil sílu typovaného Latte a tak jsem zkoušel předat parametry do šablony Latte jako třídu podle dokumentace https://latte.nette.org/cs/develop#…
V dokumentaci je uveden vzor kódu pro Latte bez Nette:
$latte->render('mail.latte', new MailTemplateParameters(
lang: $this->lang,
subject: $title,
price: $this->getPrice(),
items: [],
address: $userAddress,
));
pro Latte s Nette jsem vyzkoušel tyto syntaxe:
class MyControl extends Control
{
public function render(): void
{
$this->template->setParameters(['text' => 'abc']); // předat pole je funkční
$this->template->render(__DIR__.'/myControl.latte');
}
}
$this->template->render(__DIR__.'/myControl.latte', ['text' => 'abc']); // předat pole jako druhý parametr je funkční
class MyControlParameters
{
public function __construct(public string $text)
{}
}
$this->template->render(__DIR__.'/myControl.latte', new MyControlParameters(text: 'abc')); // TypeError
$this->template->setParameters(new MyControlParameters(text: 'abc')); // TypeError
$this->template->render(__DIR__.'/myControl.latte');
Latte neumožní předat jako parametry objekt třídy. Mám latte/latte 3.0.14
Co s tím dělat ??
Editoval m.brecher (17. 5. 2:32)
- m.brecher
- Generous Backer | 864
@F.Vesely
Zkus se podivat do dokumentace viz https://doc.nette.org/…on/templates#…
Tento způsob znám a používám, ale odkazoval jsem na jiný způsob předání parametrů do šablony také uvedený v dokumentaci a sice zde:
https://latte.nette.org/cs/develop#…
Tento druhý způsob jsem zkoušel a parametry jako třída tímto způsobem předat nejdou.
- Marek Znojil
- Člen | 90
Objekt $this->template
v
Nette\Application\UI\Control
je třída (nebo její potomek)
Nette\Bridges\ApplicationLatte\DefaultTemplate
, nenadefinuješ-li
jinak. V ní metody render()
nebo setParameters()
argumenty pro parametry přijímají pouze jako pole.
https://github.com/…Template.php#L52
https://github.com/…Template.php#L40
Příklad na který odkazuješ je ukázka přímo pro
Latte\Engine
.
https://github.com/…e/Engine.php#L69
Takže v případě komponenty (potomek
Nette\Application\UI\Control
) by měl být princip stejný jako
ten, na který odkazoval @F.Vesely.