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