Nette Documentation Preview

syntax
Típusrendszer
*************

<div class=perex>

A típusrendszer kulcsfontosságú a robusztus alkalmazások fejlesztéséhez. A Latte a sablonokba is bevezeti a típusok támogatását. Annak köszönhetően, hogy tudjuk, milyen adat- vagy objektumtípus van minden változóban,

- az IDE helyesen tud súgni (lásd [integráció |recipes#Szerkesztők és IDE-k])
- a statikus analízis felfedheti a hibákat

Mindkettő alapvetően növeli a fejlesztés minőségét és kényelmét.

</div>

.[note]
A deklarált típusok informatívak, és a Latte jelenleg nem ellenőrzi őket.

Hogyan kezdjük el használni a típusokat? Hozzon létre egy sablonosztályt, pl. `CatalogTemplateParameters`, amely reprezentálja az átadott paramétereket, azok típusait és esetleg alapértelmezett értékeit:

```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(),
));
```

Ezután a sablon elejére illessze be a `{templateType}` taget az osztály teljes nevével (beleértve a névteret is). Ez definiálja, hogy a sablonban a `$langs` és `$products` változók a megfelelő típusokkal együtt léteznek. A lokális változók típusait a [`{var}` |tags#var default], `{varType}`, [`{define}` |template-inheritance#Definíciók define] tagekkel adhatja meg.

Ettől kezdve az IDE helyesen tud súgni.

Hogyan spórolhatunk munkát? Hogyan írhatjuk le a legegyszerűbben a sablonparaméterekkel rendelkező osztályt vagy a `{varType}` tageket? Hagyjuk, hogy legenerálódjanak. Erre létezik a `{templatePrint}` és `{varPrint}` tagpár. Ha ezeket elhelyezi a sablonban, a szokásos renderelés helyett az osztály kódjának javaslata, illetve a `{varType}` tagek listája jelenik meg. A kódot ezután elég egy kattintással kijelölni és a projektbe másolni.


`{templateType}`
----------------
A sablonba átadott paraméterek típusait egy osztály segítségével deklaráljuk:

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


`{varType}`
-----------
Hogyan deklaráljuk a változók típusait? Erre szolgálnak a `{varType}` tagek a meglévő változókhoz, vagy a [`{var}` |tags#var default]:

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


`{templatePrint}`
-----------------
Az osztályt a `{templatePrint}` tag segítségével is legeneráltathatja. Ha ezt a sablon elejére helyezi, a szokásos renderelés helyett az osztály javaslata jelenik meg. A kódot ezután elég egy kattintással kijelölni és a projektbe másolni.


`{varPrint}`
------------
A `{varPrint}` tag időt takarít meg az írással. Ha ezt a sablonba helyezi, a szokásos renderelés helyett a lokális változókhoz tartozó `{varType}` tagek javaslata jelenik meg. A kódot ezután elég egy kattintással kijelölni és a sablonba másolni.

Maga a `{varPrint}` csak a lokális változókat írja ki, amelyek nem sablonparaméterek. Ha az összes változót ki szeretné írni, használja a `{varPrint all}`-t.

Típusrendszer

A típusrendszer kulcsfontosságú a robusztus alkalmazások fejlesztéséhez. A Latte a sablonokba is bevezeti a típusok támogatását. Annak köszönhetően, hogy tudjuk, milyen adat- vagy objektumtípus van minden változóban,

  • az IDE helyesen tud súgni (lásd integráció)
  • a statikus analízis felfedheti a hibákat

Mindkettő alapvetően növeli a fejlesztés minőségét és kényelmét.

A deklarált típusok informatívak, és a Latte jelenleg nem ellenőrzi őket.

Hogyan kezdjük el használni a típusokat? Hozzon létre egy sablonosztályt, pl. CatalogTemplateParameters, amely reprezentálja az átadott paramétereket, azok típusait és esetleg alapértelmezett értékeit:

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(),
));

Ezután a sablon elejére illessze be a {templateType} taget az osztály teljes nevével (beleértve a névteret is). Ez definiálja, hogy a sablonban a $langs és $products változók a megfelelő típusokkal együtt léteznek. A lokális változók típusait a {var}, {varType}, {define} tagekkel adhatja meg.

Ettől kezdve az IDE helyesen tud súgni.

Hogyan spórolhatunk munkát? Hogyan írhatjuk le a legegyszerűbben a sablonparaméterekkel rendelkező osztályt vagy a {varType} tageket? Hagyjuk, hogy legenerálódjanak. Erre létezik a {templatePrint} és {varPrint} tagpár. Ha ezeket elhelyezi a sablonban, a szokásos renderelés helyett az osztály kódjának javaslata, illetve a {varType} tagek listája jelenik meg. A kódot ezután elég egy kattintással kijelölni és a projektbe másolni.

{templateType}

A sablonba átadott paraméterek típusait egy osztály segítségével deklaráljuk:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Hogyan deklaráljuk a változók típusait? Erre szolgálnak a {varType} tagek a meglévő változókhoz, vagy a {var}:

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

{templatePrint}

Az osztályt a {templatePrint} tag segítségével is legeneráltathatja. Ha ezt a sablon elejére helyezi, a szokásos renderelés helyett az osztály javaslata jelenik meg. A kódot ezután elég egy kattintással kijelölni és a projektbe másolni.

{varPrint}

A {varPrint} tag időt takarít meg az írással. Ha ezt a sablonba helyezi, a szokásos renderelés helyett a lokális változókhoz tartozó {varType} tagek javaslata jelenik meg. A kódot ezután elég egy kattintással kijelölni és a sablonba másolni.

Maga a {varPrint} csak a lokális változókat írja ki, amelyek nem sablonparaméterek. Ha az összes változót ki szeretné írni, használja a {varPrint all}-t.