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