Система типов
Система типов принципиально важна для разработки надёжных приложений. Latte приносит поддержку типов и в шаблоны. Зная тип данных или объекта каждой переменной, он позволяет:
- IDE правильно дополнять код (см. интеграцию и плагины)
- статическому анализу обнаруживать ошибки
И то, и другое значительно повышает качество и удобство разработки.
Объявленные типы носят информативный характер, и Latte их пока не проверяет.
Как начать использовать типы? Создайте класс шаблона, например
CatalogTemplateParameters, описывающий передаваемые параметры, их типы и
при необходимости значения по умолчанию:
class CatalogTemplateParameters
{
public function __construct(
public string $lang,
/** @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} с полным именем
класса (включая пространство имён). Тем самым вы определите, что в
шаблоне существуют переменные $lang, $products и $address,
включая их типы. Типы локальных переменных можно указать с помощью
тегов {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}. Если
вы поместите его в начало шаблона, вместо обычной отрисовки
отобразится заготовка кода класса. Затем достаточно одним щелчком
выделить код и скопировать его в проект. При желании можно указать имя
родительского класса, например {templatePrint ParentClass}, и
сгенерированный класс будет его наследовать.
{varPrint}
Тег {varPrint} экономит вам время на написание кода. Если вы
поместите его в шаблон, вместо обычной отрисовки отобразится
заготовка тегов {varType} для локальных переменных. Затем
достаточно одним щелчком выделить код и скопировать его в шаблон.
Сам по себе {varPrint} выводит только локальные переменные,
которые не являются параметрами шаблона. Если вы хотите вывести все
переменные, используйте {varPrint all}.