Jak předat parametry do šablony jako třídu ??

m.brecher
Generous Backer | 864
+
0
-

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)

F.Vesely
Člen | 369
+
0
-

Zkus se podivat do dokumentace viz https://doc.nette.org/…on/templates#…

m.brecher
Generous Backer | 864
+
0
-

@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
+
+1
-

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.