-
-
Notifications
You must be signed in to change notification settings - Fork 277
Expand file tree
/
Copy pathtype-system.texy
More file actions
73 lines (50 loc) · 2.96 KB
/
type-system.texy
File metadata and controls
73 lines (50 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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 $lang,
/** @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é `$lang` 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}`.