Nette Documentation Preview

syntax
Система типов
*************

<div class=perex>

Система типов является ключевой для разработки надежных приложений. Latte обеспечивает поддержку типов и в шаблонах. Благодаря тому, что мы знаем, какой тип данных или объекта находится в каждой переменной,

- IDE может правильно подсказывать (см. [интеграцию |recipes#Редакторы и IDE])
- статический анализ может выявить ошибки

Оба этих фактора существенно повышают качество и удобство разработки.

</div>

.[note]
Объявленные типы являются информативными, и Latte в настоящее время их не проверяет.

Как начать использовать типы? Создайте класс шаблона, например `CatalogTemplateParameters`, представляющий передаваемые параметры, их типы и, возможно, значения по умолчанию:

```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(),
));
```

А затем в начало шаблона вставьте тег `{templateType}` с полным именем класса (включая пространство имен). Это определяет, что в шаблоне есть переменные `$langs` и `$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}`.

Система типов

Система типов является ключевой для разработки надежных приложений. Latte обеспечивает поддержку типов и в шаблонах. Благодаря тому, что мы знаем, какой тип данных или объекта находится в каждой переменной,

  • IDE может правильно подсказывать (см. интеграцию)
  • статический анализ может выявить ошибки

Оба этих фактора существенно повышают качество и удобство разработки.

Объявленные типы являются информативными, и Latte в настоящее время их не проверяет.

Как начать использовать типы? Создайте класс шаблона, например CatalogTemplateParameters, представляющий передаваемые параметры, их типы и, возможно, значения по умолчанию:

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(),
));

А затем в начало шаблона вставьте тег {templateType} с полным именем класса (включая пространство имен). Это определяет, что в шаблоне есть переменные $langs и $products с соответствующими типами. Типы локальных переменных можно указать с помощью тегов {var}, {varType}, {define}.

С этого момента IDE сможет правильно подсказывать.

Как сэкономить работу? Как проще всего написать класс с параметрами шаблона или тегами {varType}? Позвольте им сгенерироваться. Для этого существует пара тегов {templatePrint} и {varPrint}. Если вы разместите их в шаблоне, вместо обычной отрисовки отобразится предложение кода класса или список тегов {varType}. Затем достаточно одного клика, чтобы выделить код и скопировать его в проект.

{templateType}

Типы параметров, передаваемых в шаблон, объявляются с помощью класса:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Как объявить типы переменных? Для этого служат теги {varType} для существующих переменных или {var}:

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

{templatePrint}

Класс также можно сгенерировать с помощью тега {templatePrint}. Если вы разместите его в начале шаблона, вместо обычной отрисовки отобразится предложение класса. Затем достаточно одного клика, чтобы выделить код и скопировать его в проект.

{varPrint}

Тег {varPrint} сэкономит вам время на написание. Если вы разместите его в шаблоне, вместо обычной отрисовки отобразится предложение тегов {varType} для локальных переменных. Затем достаточно одного клика, чтобы выделить код и скопировать его в шаблон.

Сам {varPrint} выводит только локальные переменные, которые не являются параметрами шаблона. Если вы хотите вывести все переменные, используйте {varPrint all}.