Система типов
Система типов – это главное для разработки надежных приложений. 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}
. Если вы поместите один из этих
тегов в шаблон, то вместо обычного рендеринга будет отображаться код
класса или шаблона. Затем просто выделите и скопируйте код в свой
проект.
{templateType}
Типы параметров, передаваемых в шаблон, объявляются с помощью класса:
{templateType MyApp\CatalogTemplateParameters}
{varType}
Как объявить типы переменных? Для этого используйте тег {varType}
для существующей переменной, или {var}
:
{varType Nette\Security\User $user}
{varType string $lang}
{templatePrint}
Вы также можете сгенерировать этот класс с помощью тега
{templatePrint}
. Если поместить его в начало шаблона, то вместо
обычного шаблона будет отображаться код класса. Затем просто выделите
и скопируйте код в свой проект.
{varPrint}
Тег {varPrint}
экономит ваше время. Если поместить его в шаблон, то
вместо обычного рендеринга отобразится список тегов {varType}
.
Затем просто выберите и скопируйте код в свой шаблон.
В {varPrint}
перечислены локальные переменные, которые не являются
параметрами шаблона. Если вы хотите перечислить все переменные,
используйте {varPrint all}
.