Registrované vlastní makro neexistuje
- chikeet
- Člen | 160
Zdravím, řeším problém s vlastním makrem. Registrace makra proběhne bez chyby, při použití ale laděnka hlásí „Exception in Nette\Templating\Template::__toString(): Unknown macro {AHOJ} in C:\xampp-1–7–7-standalone4\htdocs\libs\Nette\Latte\Compiler.php:519“.
Použití makra:
$template = new StringTemplate();
$template->presenter = $this->presenter;
$template->registerFilter(new \Nette\Latte\Engine);
$template->setSource($html);
$html = $template->__toString();
Vypadá to, že v \Nette\Latte\Engine moje makro AHOJ není. Jeho registrace proběhla bez problémů, takže mě napadá jen to, že to makro se uložilo do jiného Engine, než se předává $template.
Chápu správně, že je potřeba vytvořit jen jednu instanci Engine a tu pak předávat všude, kde se přidávají nebo používají vlastní makra? Nebo je to jinak? Pokud je v pořádku vytvořit pokaždé novou instanci Engine, v čem potom může být problém?
- Majkl578
- Moderator | 1364
Vždyť v tom kódu svoje makro nikde neregistruješ.
Chápu správně, že je potřeba vytvořit jen jednu instanci Engine a tu pak předávat všude, kde se přidávají nebo používají vlastní makra?
Vesměs ano. Latte už v DI je, jako továrnička. Používá se např. v Application\UI\Control.
- chikeet
- Člen | 160
Makro registruju jinde a dotyčný kód se volá před kódem, který to makro potřebuje (ověřeno). Pro úplnost přidávám ještě kód, který registruje makro:
$latte = new Nette\Latte\Engine;
$set = new Nette\Latte\Macros\MacroSet($latte->compiler);
$set->addMacro(
'AHOJ',
'echo "ahoj" . %node.args'
);
Předpokládám, že registrace makra je v pořádku, vzhledem k tomu, že nevyhazuje žádnou chybu.
Takže pokud to chápu správně, problém bude ve vytváření nového Engine.