Latte novinky: linter a striktní režim
Jak včas zjistit, jestli v šablonách nejsou chyby? Máte k dispozici hned několik způsobů.
Linter: kontrola šablon na disku
Před nasazením projektu je užitečné projít všechny šablony a zkontrolovat, zda neobsahují syntaktické chyby. S tím vám pomůže nástroj Linter. Spouští se z konzole:
vendor/bin/latte-lint <cesta> [--strict]
Parametrem --strict
aktivujete striktní režim parseru, viz
dále. Pokud používáte vlastní značky, vytvořte si upravený Linter.
Kontrola šablon za běhu
Jak kontrolovat validitu šablon za běhu programu, například pokud je
edituje uživatel? V případě syntaktické chyby v souboru
.latte
dojde při kompilaci šablony k vyhození výjimky
Latte\CompileException
. Nicméně věc je poněkud složitější.
Pokud je šablona v pořádku, Latte ji zkompiluje do PHP kódu. Ten je
samozřejmě syntakticky korektní, ale pozor: jednak nesprávný kód může
vygenerovat rozšíření třetí strany, ale především i v syntakticky
platném kódu se může skrývat zakázaná operace. Tou je třeba přiřazení
$this = 123
. Jelikož PHP eviduje na dvě stovky různých
zakázaných situací, není ambicí Latte je všechny hlídat a ke kontrole
využívá PHP engine. K tomu potřebuje znát cestu k PHP binárce, kterou
nastavíme metodou enablePhpLinter()
:
$latte = new Latte\Engine;
$latte->enablePhpLinter('/path/to/php');
try {
$latte->compile('home.latte');
} catch (Latte\CompileException $e) {
// nyní zachytí i kompilační chyby PHP
echo 'Error: ' . $e->getMessage();
}
Cestu k binárce je možné předat také prostřednictvím konfigurace:
latte:
phpLinter: ...
Poznámka: plná kontrola za běhu je užitečná ve chvíli, kdy například umožňujete uživatelům editovat šablony. Při běžném vývoji je zcela OK nechat na tento typ chyb upozornit až PHP při pokusu šablonu vykreslit.
Striktní režim parseru
Ačkoliv Latte rozumí velmi dobře HTML, je benevolentní v tom, jak jej zapisujete. Jestli všechny značky správně uzavíráte a jestli z nich nemícháte „značkovou polévku“. Bere to tak, že jako autor šablony víte, co děláte.
Novinkou je striktní režim parseru, ve kterém Latte naopak na všechny prohřešky upozorňuje. Například:
<p> // neuzavřená značka
<p>...<p> // chybějící /
<p>...</x> // špatná uzavírací značka
{if x}<a>{/if} </a> // riziko nevalidního HTML
<foo{foo}> // riziko ovlivnění názvu značky
Režim lze zapnout pomocí:
$latte = new Latte\Engine;
$latte->setStrictParsing();
Nebo v konfiguračním souboru:
latte:
strictParsing: true
V tomto režimu Latte zajišťuje, aby vaše šablony dodržovaly nejvyšší standardy kvality kódu.
One more thing
Latte nově podporuje dynamické HTML značky, které jsou užitečné, když potřebujete flexibilitu v názvech:
<h{$level}>Heading</h{$level}>
Výše uvedený kód může například generovat
<h1>Heading</h1>
nebo
<h2>Heading</h2>
v závislosti na hodnotě proměnné
$level
. Dynamické HTML značky v Latte musí být vždy párové.
Jejich alternativou je n:tag.
Protože Latte je bezpečný šablonovací systém, kontroluje, zda je
výsledný název značky platný a neobsahuje žádné nežádoucí nebo
škodlivé hodnoty. Dále zajistí, že název koncové značky bude vždy
stejný jako název otevírací značky. I kdyby se hodnota proměnné
$level
změnila.
Chcete-li odeslat komentář, přihlaste se