Prosím o otestování Latte 3.0.8
- David Grudl
- Nette Core | 8227
Prosím o otestování Latte 3.0.8 RC
composer require latte/latte:^3.0.8-RC1
Je to sotva pár dnů, co jsem tu popisoval verzi 3.0.7 a už mám připravenou další :-) Opět hromada vylepšení se ukrývá pod kapotou, ale přináší také zajímavé novinky:
Striktní režim
Latte zavádí nový experimentální striktní režim parseru. Zapíná se pomocí:
$latte = new Latte\Engine;
$latte->setStrictParsing();
nebo v linteru:
vendor/bin/latte-lint <cesta> --strict
Striktní parser upozorní, když v šabloně použijete $this
,
na tzv. tag soup:
<p> // neuzavřená značka
<p>...<p> // chybějící /
<p>...</x>
{if x}<a>{/if} </a>
A také vyžaduje mezeru mezi názvem tagu a Latte značkou:
<foo{foo}> // špatně
<foo {foo}> // dobře
V budoucnu se zřejmě okruh věcí, na které upozorní, rozšíří.
Naopak zákaz $this
bych rád časem dal do standardního
režimu.
Variable tag name
<{$tag} title=foo>...</{$tag}>
Tento zápis bylo možné používat i dříve, Latte tomu nijak nebránilo.
Nyní je oficiálně podporován, což třeba znamená, že Latte kontroluje
validitu názvu tagu. Tagy jsou vždy párové a uzavírací značka vypíše
stejný název tagu, jako otevírací, i když se hodnota $tag
změní. A navíc je možné používat n:atributy.
- Marek Bartoš
- Nette Blogger | 1274
zakazuje použití $this
Bylo by možné mít funkci hasBlock? ifset s více parametry dělá
&& a v layoutech se mi často hodí ||, který teď afaik nejde
jednoduše zapsat
{if $this->hasBlock('title') || $this->hasBlock('action-buttons') || $this->hasBlock('breadcrumb')}
nebo {var $hasActionsColumn = $this->hasBlock("row-actions") || isset($form['filter'])}
Další případ, co používá $this
je nextras datagrid https://github.com/…blocks.latte
Tam to ale nejspíš bude řešitelné? (případně se pro tenhle edge case dá
striktní parsing lokálně vypnout)
- Gappa
- Nette Blogger | 208
Linter je fajn věc, díky :)
Mám dotaz – když potřebuji přidat nějaká vlastní Latte extension, tak musím nejprve ručně přidat všechny standardní extension, jako to dělá základní Linter:
Nešlo by to nějak oddělit/vymyslet, že by se dal získat takto defaultně nakonfigurovaný Engine a jen se doplnil o custom Extension? IMHO to bude nejčastější scénář.
Nebo to nějak jde a jen špatně hledám? :)
Dále jsem narazil na problém v dokumentaci a vytvořil na to issue:
- Marek Bartoš
- Nette Blogger | 1274
Engine si můžeš předat v konstruktoru. A nakonfigurovaný z aplikace ho získáš přes TemplateFactory->getTemplate()->getLatte(). Jen si pak musíš sám nastavit strict parsing a php linter.
Editoval Marek Bartoš (31. 8. 2023 9:10)
- David Grudl
- Nette Core | 8227
Přidal jsem tam metodu Linter::getEngine()
, tím by se to mělo
vyřešit.
- Tomáš Vodička
- Člen | 28
Začal jsem si trochu hrát s Linterem a došel jsem k problému, kdy mám extension, která přidává vlastní značku, ale má více dynamických závislostí s nastavením z configu.
Byla by možnost například nastavit pro linter ignorování nějaké značky? Zrovna u téhle mě syntaktická správnost úplně tolik nezajímá.
Případně jestli někoho nenapadá, jak tyhle případy řešit – vytvářet celý kontejner, nebo simulovat DI a vytvářet extension ručně mi nepřijde jako správná cesta.
- David Grudl
- Nette Core | 8227
A nemužeš si to Latte nechat přímo sestavit kontejnerem (tj.
vytáhnout Nette\Bridges\ApplicationLatte\LatteFactory
), nebo
z něj alespoň vytáhnout ty extensions?
- Tomáš Vodička
- Člen | 28
Ta možnost tu je, jen jsem chtěl zjistit, jestli není ještě nějaká jiná cesta
Pokud budu chtít spouštět Lint v CI, budu si muset pro sestavení kontejneru commitovat do repozitáře nějaký fejkový config s lokálními daty. Ale asi tedy není jiná možnost než si sestavit extension ručně, nebo vygenerovat celý kontejner a vytáhnout si extension z něj