Typový systém

Typový systém je základním kamenem pro vývoj robustních aplikací. Latte přináší podporu typů i do šablon. Díky znalosti datových či objektových typů každé proměnné můžeme dosáhnout:

  • Přesného našeptávání v IDE (viz integrace)
  • Odhalení chyb pomocí statické analýzy

Tyto funkce výrazně zvyšují kvalitu kódu a usnadňují vývojový proces.

Je důležité poznamenat, že deklarované typy jsou v současné době pouze informativní a Latte je aktivně nekontroluje.

Jak implementovat typový systém? Začněte vytvořením třídy reprezentující parametry šablony, například CatalogTemplateParameters. Tato třída definuje předávané parametry, jejich typy a případně i výchozí hodnoty:

class CatalogTemplateParameters
{
	public function __construct(
		public string $langs,
		/** @var ProductEntity[] */
		public array $products,
		public Address $address,
	) {}
}

$latte->render('template.latte', new CatalogTemplateParameters(
	address: $userAddress,
	lang: $settings->getLanguage(),
	products: $entityManager->getRepository('Product')->findAll(),
));

Následně na začátek šablony umístěte značku {templateType} s plně kvalifikovaným názvem třídy (včetně namespace). Tím definujete, že v šabloně jsou k dispozici proměnné $langs a $products s příslušnými typy. Pro lokální proměnné můžete typy specifikovat pomocí značek {var}, {varType}, nebo {define}.

Tyto kroky umožní vašemu IDE poskytovat přesné našeptávání.

Pro usnadnění práce s typovým systémem Latte nabízí nástroje pro automatické generování kódu:

  • {templatePrint} generuje návrh třídy s parametry šablony
  • {varPrint} vytváří seznam značek {varType} pro lokální proměnné

Tyto značky při použití v šabloně zobrazí návrh kódu místo běžného vykreslení. Vygenerovaný kód lze pak jednoduše zkopírovat do vašeho projektu nebo šablony.

{templateType}

Pro deklaraci typů parametrů předávaných do šablony použijte třídu následujícím způsobem:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Pro deklaraci typů existujících proměnných použijte {varType}, pro nové proměnné {var}:

{varType Nette\Security\User $user}
{varType string $lang}

{templatePrint}

Pro automatické generování třídy parametrů šablony použijte {templatePrint} na začátku šablony. Místo běžného vykreslení se zobrazí návrh třídy, který můžete jednoduše zkopírovat do svého projektu.

{varPrint}

Značka {varPrint} vám ušetří čas se psaním. Pokud ji umístíte do šablony, místo běžného vykreslení se zobrazí návrh značek {varType} pro lokální proměnné. Kód pak stačí jedním kliknutím označit a zkopírovat do šablony.

Samotné {varPrint} vypisuje pouze lokální proměnné, které nejsou parametry šablony. Pokud chcete vypsat všechny proměnné, použijte {varPrint all}.

Implementace typového systému v Latte významně přispívá k vytváření robustnějších a lépe udržovatelných šablon, což vede k celkovému zlepšení kvality vašich aplikací.

verze: 3.0