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