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

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

версия: 3.0