Nette Documentation Preview

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

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


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

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

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

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

И то, и другое значительно повышает качество и удобство разработки.

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

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

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

{varPrint}

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

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