jak vytvořit vlastní Latte funkci
- trta911
- Člen | 35
Rád bych si rozjel nějakou vlastní latte funkci (bude šahat do databáze, pak nad tím udělá nějakou svoji logiku a vrátí string)
Tak jsem zkoušel postupovat dle návodu v doku.
Pokud jsem funkci definoval přímo v presenteru tak to vše chodilo. Ale já bych rád nějaké univerzálnější použití (nebude to funkce na 1 řádek) někde v nějakém extra souboru/modelu a ten si jen injectnul do presenteru nebo ji použil ve formě traity. Asi jsem to vysvětlované samostatné použití nějak nepochopil.
Zkoušel jsem to podobně jako u maker:
use Latte\Engine;
class MyLatteFunction extends Engine
{
/** @function */
public static function install()
{
$template = new Engine();
$template->addFunction("changeMyText", function($id){
//some db stuff
return "abcdefg";
});
}
}
a v configu jsem pak měl
latte:
macros:
- App\Macros\MyLatteFunction
což je špatně. Nevím, jestli tak jak to chci udělat je to proveditelné ale budu moc rád za každou radu.
- dakur
- Člen | 493
@trta911 Jestli to je proveditelné, to upřímně řečeno nevím, ale určitě to není správně. Pokud saháš z view do databáze, tak můžeš rovnou zahodit celý MVC model, na kterém Nette stojí.
Proč nemůžeš udělat tu transformaci ještě v modelu a do presenteru už předávat výsledný string? Latte už by mělo jen renderovat, ne obsahovat/volat logiku. Pokud to tedy není vyloženě „UI logika“ (ta ale nesahá do DB), o tom jsem nedávno mluvil na posobotě.
Editoval dakur (5. 7. 2021 17:13)