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