Nette Documentation Preview

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

<div class=perex>

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

- IDE правильно осуществлять автозаполнение (см. [интеграцию и плагины |recipes#Editors-and-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#Definitions].

Теперь IDE может корректно автозаполнять.

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


`{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}. Если вы поместите один из этих тегов в шаблон, то вместо обычного рендеринга будет отображаться код класса или шаблона. Затем просто выделите и скопируйте код в свой проект.

{templateType}

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

{templateType MyApp\CatalogTemplateParameters}

{varType}

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

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

{templatePrint}

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

{varPrint}

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

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