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

Типовата система е ключова за разработването на стабилни приложения. 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} с пълното име на класа (включително namespace). Това дефинира, че в шаблона има променливи $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