Kdyby Translation, chyba při načítání latte souboru
- inri
- Člen | 10
Ahoj, používáme v aplikaci Kdyby Translations, které jinak v pohodě
fungují, v presenterech, formulářích i v latte šablonách. Když si ale
potřebuju načíst celý latte soubor, který potom budu odesílat mailem a ve
kterém mám macra s texty ve formátu {_'ui.neco'}, tak mi Tracy hlásí:
Filter ‚translate‘ is not defined. Konkrétně vypisuje chybu v presenteru
v Latte\Engine->renderToString()
Asi potřebuju ještě něco nadefinovat, ale netuším kde a co. Děkuji.
- Šaman
- Člen | 2662
Bez kódu jen hádám, že to bude stejny problém, jako se řešil tady: https://forum.nette.org/…atte-e-mailu#…
- Toanir
- Člen | 57
Ahoj, myslím si že mazat netřeba. To že se opakuje problém dokola může napovídat že může být matoucí dokumentace. Můžu se zeptat odkud jsi čerpal?
Pokud jsi vycházel z mailing dokumentace, možná je na nás přidat tam poznámku, něco ve smyslu „Pokud používáte mailing v Nette aplikaci, nevytvářejte si vlastní Latte\Engine ale použijte ILatteFactory z kontejneru viz <ukázka kódu>“
edit: Teď koukám, že tam něco v tom smyslu už psáno je, akorát je to ve spojitosti s odkazy. Možná by ta sekce „Creating links“ šla zobecnit na „Using with Nette Application“ a šlo by v ní zahrnout vytváŕení odkazů a zmínit i používání registrovaných filtrů.
Editoval Toanir (7. 4. 2020 10:00)
- Šaman
- Člen | 2662
Ono obecně v Nette aplikacich je operátor new
něco, co by se
mělo používat minimálně. Běžně ho používám asi jen pro DateTime a
DateInterval, výjimečně Exception a to je asi vše. Pokud používám
nějaký ORM, tak se pomocí new
vytváří nově vzniklé
Entity.
Ale třeba i na formuláře mám službu FormFactory
, která mi
přidá renderer a případně translator a podobné fičurky. A stejně na tom
je i LatteEngine, různé komponenty apod. Operátorem new
se
vytvoří čistý objekt na zelené louce. Pokud na něj někde existuje
továrna, většinou ona zajistí, že ten holý objekt nastaví a připraví
tak, jak jsme zvyklí.
Problém může být v tom, že dokumentace třeba k Latte musí pracovat
s tím čistým objektem. Latte JE použitelné samostatně. Ale my s ním
běžně pracujeme až o vrstvu výš, nikoliv na úrovni samotného
šablonovacího systému (new \Latte\Engine;
), ale šablonovacího
systému integrovaného do Nette
(\Nette\Bridges\ApplicationLatte\LatteFactory::create()
). Čímž
jsme se posunuli ze základního namespace Latte
do
Nette
.
Krásně je to vidět v té
továrně
Na řádku 61 je to, co dostaneme při ručním vytváření šablony a na
řádku 132 je vrácená šablona se vším, co na ni navěsila továrna.
Editoval Šaman (7. 4. 2020 14:10)
- Toanir
- Člen | 57
S rozumným balením do továren a tedy minimalizací užívání operátoru
new
naprosto souhlasím a sám taky provozuju, když zrovna nejsem
mega línej a nedělám na něčem důležitým. :P
Co nejholejší ukázky taky dávají smysl a akorát bych doplnil že v sekci Mailing – Creating Links už je ukázka použití v ukázkový službě patřící do Nette/Application. Chtěl bych přidat zmínku o translate filtru a ostatních custom srandách nad šablonou. Myslím si že se v týhle sekci hodí odůvodnění, proč používat ITemplateFactory.
Jsem si skoro jistej, že jsem si na tomhle taky namlel čumák, když jsem začínal (s Nette) :)
Editoval Toanir (7. 4. 2020 20:42)