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