-
-
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.57 KB
/
type-system.texy
File metadata and controls
73 lines (50 loc) · 4.57 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}`.