Nette Documentation Preview

syntax
Typový systém
*************

<div class=perex>

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|recipes#Editory a IDE])
- Odhalení chyb pomocí statické analýzy

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

</div>

.[note]
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:

```php
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}` |tags#var-default], `{varType}`, nebo [`{define}` |template-inheritance#definice].

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:

```latte
{templateType MyApp\CatalogTemplateParameters}
```


`{varType}`
-----------
Pro deklaraci typů existujících proměnných použijte `{varType}`, pro nové proměnné [`{var}` |tags#var-default]:

```latte
{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í.

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í.