Jak migrovat z Twig na Latte?
- souki
- Bronze Partner | 22
Děláme eshopy a používáme Twig šablony. Některé věci mi v nich ale
chybí, takže bych to rád migroval na Latte. Narazil jsem ale na dvě věci,
který neumím v Latte vyřešit.
Základním problémem je, že šablony si editují klienti (tzn. editace
šablony je veřejně přístupná), takže editací šablony nesmí
jít rozbít nic jiného, než šablona samotná. Není například možné, aby
zápisem v šabloně šel smazat produkt a podobně.
Sandbox
Ve twigu lze definovat sandbox policy (http://twig.sensiolabs.org/doc/api.html#…), která omezí,
jaké atrbibuty/metody jsou přístupné z šablon. Například lze říct, že
u všech objektů v šablonách lze přistupovat pouze k metodám
začínajícím na get nebo is
PHP
V šabloně lze používat jen to, co ji bylo předáno. Není tam možné
například přímo vkládat PHP kód nebo nějak volat SQL dotazy. Pokud se má
v šabloně procházet něco z databáze, tak se jí to musí předat jako
iterator v proměnné.
Je tohle nějak řešitelné? Nebo jde Latte zkrátka opačným směrem a je určené pouze pro vývojáře a s takovým použitím nepočítá?
- Pavel Macháň
- Člen | 282
@souki Tak pokud budeš do šablony vkládat pouze entity tak se o smazání dat atd bát nemusíš. Prostě nesmíš do šablony vložit repozitáře, fasády nebo něco co může měnit data.
Editoval Pavel Macháň (12. 7. 2014 11:38)
- MartinitCZ
- Člen | 580
V posledním odstavci jsi si odpověděl. Latte je pro
programátory/kodéry.
Nikoliv pro BFU a editaci přes nějaký js editor. ;)
- David Kudera
- Člen | 455
Pavel Macháň napsal(a):
@souki Tak pokud budeš do šablony vkládat pouze entity tak se o smazání dat atd bát nemusíš. Prostě nesmíš do šablony vložit repozitáře, fasády nebo něco co může měnit data.
No, sice se to nemá, ale pořád můžu udělat např. toto:
{var $database = $presenter->context->getByType('Nette\Database\Context')}
- hason
- Člen | 23
@souki Pro Twig je spousta rozšíření. Podporu pro „t-tagy“ a analýzu html přidává rozšíření twital https://github.com/goetas/twital
<ul t:if="users">
<li t:for="user in users">
{{ user.name }}
</li>
</ul>
Zápis pomocí haml syntaxe řeší MtHaml https://github.com/…ud-lb/MtHaml
- if users
%ul
- for user in users
%li.user
= user.name
Samozřejmě lze obě rozšíření kombinovat:
%ul(t:if="users")
%li(t:for="user in users")
= user.name
Kontextové escapování se připravuje pro twital i mthaml. V Twigu nelze řešit, protože je obecným šablonovacím systémem.
- David Grudl
- Nette Core | 8218
hrach napsal(a):
@souki toto implementovat neni v soucasnem latte vubec jednoduche, zda-li mozne.
Je to naopak (kupodivu) velmi jednoduché, implementoval jsem to, ale nakonec do Latte nedal. Připadá mi to jako zbytečnost.
- Filip Procházka
- Moderator | 4668
@DavidGrudl No a nemyslíš že by bylo fajn, kdyby to existovalo jako rozšíření? Já bych to taky ocenil.
- souki
- Bronze Partner | 22
hason napsal(a):
@souki Pro Twig je spousta rozšíření. Podporu pro „t-tagy“ a analýzu html přidává rozšíření twital https://github.com/goetas/twital
<ul t:if="users"> <li t:for="user in users"> {{ user.name }} </li> </ul>
Díky! Já věděl, že už to někdo musel řešit :)
- souki
- Bronze Partner | 22
David Grudl napsal(a):
hrach napsal(a):
@souki toto implementovat neni v soucasnem latte vubec jednoduche, zda-li mozne.
Je to naopak (kupodivu) velmi jednoduché, implementoval jsem to, ale nakonec do Latte nedal. Připadá mi to jako zbytečnost.
Typické využití je v šablonách e-mailů. Chci, aby si je uživatel mohl editovat, ale zároveň nechci, aby tím mohl obejít veškerá přístupová práva.
- Honza Kuchař
- Člen | 1662
Myslím, že jako nádstavba nad šablonovacím systémem by to bylo super, ale přímo do jádra Latte bych to netahal.
- Caine
- Člen | 216
David Grudl napsal(a):
hrach napsal(a):
@souki toto implementovat neni v soucasnem latte vubec jednoduche, zda-li mozne.
Je to naopak (kupodivu) velmi jednoduché, implementoval jsem to, ale nakonec do Latte nedal. Připadá mi to jako zbytečnost.
@DavidGrudl – Proc je to zbytecnost? Uz to resime asi u 3. vetsiho projektu, spousta klientu si chce psat vlastni sablony napr. mailu a dokumentu (ze kterejch se pak generuje pdf) + chtej tam mit placeholdery a moznost podminkovat, cykly, nekdy i filtry..
- Jan Tvrdík
- Nette guru | 2595
@potapnik Proženeš výslednou zkompilovanou šablonu phpparserem od nikic a zkontroluješ, že neobsahuje nic, co nechceš. Good luck!
- MartyIX
- Člen | 217
Tak přemýšlím, jak bych to dělal, a asi bych si do Latte zaregistroval vlastní striktní makra pro všechny operace, které chci povolit (napr. {if $zdePouzePromenna}, {foreach $iterable as $key ⇒ $value}, …). Ale samozřejmě záleží, jak jsou ty šablony komplikované.
Opačná cesta je cesta do pekel (jak naznačuje Jan Tvrdík).
- Martk
- Člen | 661
@FreeWall Používám tohle: https://github.com/AntikCz/Latte (Zbraňuje volání tříd, funkcí, globálních funkcí, superglobálních a globálních proměnných, konstant a omezuje makra)
Instalace jako Latte\Engine.
- David Grudl
- Nette Core | 8218
Knihovna pro migraci z Twig na Latte: https://twig2latte.nette.org a https://github.com/…/latte-tools