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