Nette Documentation Preview

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

<div class=perex>

Типовата система е ключова за разработването на стабилни приложения. Latte въвежда поддръжка на типове и в шаблоните. Благодарение на това, че знаем какъв тип данни или обект има във всяка променлива, може

- IDE да подсказва правилно (вижте [интеграция |recipes#Редактори и IDE])
- статичният анализ да открива грешки

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

</div>

.[note]
Декларираните типове са информативни и Latte в момента не ги проверява.

Как да започнете да използвате типове? Създайте клас на шаблона, напр. `CatalogTemplateParameters`, представляващ предаваните параметри, техните типове и евентуално стойности по подразбиране:

```php
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}` |tags#var default], `{varType}`, [`{define}` |template-inheritance#Дефиниции].

От този момент IDE може да ви подсказва правилно.

Как да си спестите работа? Как най-лесно да напишете клас с параметри на шаблон или тагове `{varType}`? Нека бъдат генерирани за вас. За това съществуват двойка тагове `{templatePrint}` и `{varPrint}`. Ако ги поставите в шаблона, вместо нормалното рендиране ще се покаже предложение за код на клас или съответно списък с тагове `{varType}`. След това е достатъчно да маркирате кода с едно кликване и да го копирате в проекта.


`{templateType}`
----------------
Типовете на параметрите, предавани към шаблона, се декларират с помощта на клас:

```latte
{templateType MyApp\CatalogTemplateParameters}
```


`{varType}`
-----------
Как да декларираме типовете на променливите? За това служат таговете `{varType}` за съществуващи променливи или [`{var}` |tags#var default]:

```latte
{varType Nette\Security\User $user}
{varType string $lang}
```


`{templatePrint}`
-----------------
Можете също така да генерирате класа с помощта на тага `{templatePrint}`. Ако го поставите в началото на шаблона, вместо нормалното рендиране ще се покаже предложение за клас. След това е достатъчно да маркирате кода с едно кликване и да го копирате в проекта.


`{varPrint}`
------------
Тагът `{varPrint}` ще ви спести време за писане. Ако го поставите в шаблона, вместо нормалното рендиране ще се покаже предложение за тагове `{varType}` за локални променливи. След това е достатъчно да маркирате кода с едно кликване и да го копирате в шаблона.

Самото `{varPrint}` извежда само локални променливи, които не са параметри на шаблона. Ако искате да изведете всички променливи, използвайте `{varPrint all}`.

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

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

OSZAR »