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

Система типів є ключовою для розробки надійних додатків. 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}.

версія: 3.0