Latte novinky: linter a striktní režim

před 8 měsíci od David Grudl  

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.