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

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

версия: 3.0