jak vytvořit vlastní Latte funkci

trta911
Člen | 25
+
0
-

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

@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)