Nette Documentation Preview

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

<div class=perex>

Typový systém je klíčový pro vývoj robustních aplikací. Latte přináší podporou typů i do šablon. Díky tomu, že víme, jaký datový či objektový typ je v každé proměnné, může

- IDE správně našeptávat (viz [integrace|recipes#Editory a IDE])
- statická analýza odhalit chyby

Obojí zásadním způsobem zvyšuje kvalitu a pohodlí vývoje.

</div>

.[note]
Deklarované typy jsou informativní a Latte je v tuto chvíli nekontroluje.

Jak začít používat typy? Vytvořte si třídu šablony, např. `CatalogTemplateParameters`, reprezentující 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(),
));
```

A dále na začátek šablony vložte značku `{templateType}` s plným názvem třídy (včetně namespace). To definuje, že v šabloně jsou proměnné `$langs` a `$products` včetně příslušných typů.
Typy lokálních proměnných můžete uvést pomocí značek [`{var}` |tags#var-default], `{varType}`, [`{define}` |template-inheritance#definice].

Od té chvíle vám může IDE správně našeptávat.

Jak si ušetřit práci? Jak co nejsnáze napsat třídu s parametry šablony nebo značky `{varType}`? Nechte si je vygenerovat.
Od toho existuje dvojice značek `{templatePrint}` a `{varPrint}`.
Pokud je umístíte do šablony, místo běžného vykreslení se zobrazí návrh kódu třídy resp. seznam značek `{varType}`. Kód pak stačí jedním kliknutím označit a zkopírovat do projektu.


`{templateType}`
----------------
Typy parametrů předávaných do šablony deklarujeme pomocí třídy:

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


`{varType}`
-----------
Jak deklarovat typy proměnných? K tomu slouží značky `{varType}` pro existující proměnné, nebo [`{var}` |tags#var-default]:

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


`{templatePrint}`
-----------------
Třídu si také můžete nechat vygenerovat pomocí značky `{templatePrint}`. Pokud ji umístíte na začátek šablony, místo běžného vykreslení se zobrazí návrh třídy. Kód pak stačí jedním kliknutím označit a zkopírovat do 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}`.

Typový systém

Typový systém je klíčový pro vývoj robustních aplikací. Latte přináší podporou typů i do šablon. Díky tomu, že víme, jaký datový či objektový typ je v každé proměnné, může

  • IDE správně našeptávat (viz integrace)
  • statická analýza odhalit chyby

Obojí zásadním způsobem zvyšuje kvalitu a pohodlí vývoje.

Deklarované typy jsou informativní a Latte je v tuto chvíli nekontroluje.

Jak začít používat typy? Vytvořte si třídu šablony, např. CatalogTemplateParameters, reprezentující 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(),
));

A dále na začátek šablony vložte značku {templateType} s plným názvem třídy (včetně namespace). To definuje, že v šabloně jsou proměnné $langs a $products včetně příslušných typů. Typy lokálních proměnných můžete uvést pomocí značek {var}, {varType}, {define}.

Od té chvíle vám může IDE správně našeptávat.

Jak si ušetřit práci? Jak co nejsnáze napsat třídu s parametry šablony nebo značky {varType}? Nechte si je vygenerovat. Od toho existuje dvojice značek {templatePrint} a {varPrint}. Pokud je umístíte do šablony, místo běžného vykreslení se zobrazí návrh kódu třídy resp. seznam značek {varType}. Kód pak stačí jedním kliknutím označit a zkopírovat do projektu.

{templateType}

Typy parametrů předávaných do šablony deklarujeme pomocí třídy:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Jak deklarovat typy proměnných? K tomu slouží značky {varType} pro existující proměnné, nebo {var}:

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

{templatePrint}

Třídu si také můžete nechat vygenerovat pomocí značky {templatePrint}. Pokud ji umístíte na začátek šablony, místo běžného vykreslení se zobrazí návrh třídy. Kód pak stačí jedním kliknutím označit a zkopírovat do 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}.