-
-
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) · 4.4 KB
/
type-system.texy
File metadata and controls
73 lines (50 loc) · 4.4 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
Система типів
*************
<div class=perex>
Система типів є ключовою для розробки надійних додатків. Latte привносить підтримку типів і в шаблони. Завдяки тому, що ми знаємо, який тип даних або об'єктний тип міститься в кожній змінній, може
- IDE правильно підказувати (див. [інтеграція |recipes#Редактори та IDE])
- статичний аналіз виявляти помилки
Обидва фактори суттєво підвищують якість та зручність розробки.
</div>
.[note]
Оголошені типи є інформативними, і Latte на даний момент їх не перевіряє.
Як почати використовувати типи? Створіть клас шаблону, наприклад `CatalogTemplateParameters`, що представляє передані параметри, їх типи та, за необхідності, значення за замовчуванням:
```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(),
));
```
А далі на початку шаблону вставте тег `{templateType}` з повною назвою класу (включаючи простір імен). Це визначає, що в шаблоні є змінні `$lang` та `$products` з відповідними типами. Типи локальних змінних можна вказати за допомогою тегів [`{var}` |tags#var default], `{varType}`, [`{define}` |template-inheritance#Визначення].
З цього моменту ваше IDE може правильно підказувати.
Як заощадити роботу? Як найпростіше написати клас з параметрами шаблону або теги `{varType}`? Дозвольте їм згенеруватися. Для цього існує пара тегів `{templatePrint}` та `{varPrint}`. Якщо ви розмістите їх у шаблоні, замість звичайного рендерингу відобразиться пропозиція коду класу або список тегів `{varType}` відповідно. Потім код достатньо одним кліком виділити та скопіювати до проекту.
`{templateType}`
----------------
Типи параметрів, що передаються в шаблон, оголошуємо за допомогою класу:
```latte
{templateType MyApp\CatalogTemplateParameters}
```
`{varType}`
-----------
Як оголосити типи змінних? Для цього служать теги `{varType}` для існуючих змінних, або [`{var}` |tags#var default]:
```latte
{varType Nette\Security\User $user}
{varType string $lang}
```
`{templatePrint}`
-----------------
Клас також можна згенерувати за допомогою тегу `{templatePrint}`. Якщо ви розмістите його на початку шаблону, замість звичайного рендерингу відобразиться пропозиція класу. Потім код достатньо одним кліком виділити та скопіювати до проекту.
`{varPrint}`
------------
Тег `{varPrint}` заощадить вам час на написання. Якщо ви розмістите його в шаблоні, замість звичайного рендерингу з'явиться пропозиція тегів `{varType}` для локальних змінних. Потім код достатньо одним кліком виділити та скопіювати до шаблону.
Сам `{varPrint}` виводить лише локальні змінні, які не є параметрами шаблону. Якщо ви хочете вивести всі змінні, використовуйте `{varPrint all}`.