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}.