Система типов

Система типов принципиально важна для разработки надёжных приложений. Latte приносит поддержку типов и в шаблоны. Зная тип данных или объекта каждой переменной, он позволяет:

И то, и другое значительно повышает качество и удобство разработки.

Объявленные типы носят информативный характер, и 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}.

версия: 3.x