Nette Documentation Preview

syntax
Sistema di tipi
***************

<div class=perex>

Il sistema di tipi è fondamentale per sviluppare applicazioni solide. Latte porta il supporto ai tipi anche nei template. Conoscendo il tipo di dato o di oggetto di ogni variabile, permette:

- all'IDE di completare correttamente il codice (vedi [integrazione e plugin |recipes#Editor e IDE])
- all'analisi statica di rilevare gli errori

Entrambe le cose aumentano notevolmente la qualità e la comodità dello sviluppo.

</div>

.[note]
I tipi dichiarati hanno valore informativo e al momento Latte non li verifica.

Come iniziare a usare i tipi? Create una classe del template, per esempio `CatalogTemplateParameters`, che rappresenti i parametri passati, i loro tipi ed eventualmente i valori predefiniti:

```php
class CatalogTemplateParameters
{
	public function __construct(
		public string $lang,
		/** @var ProductEntity[] */
		public array $products,
		public Address $address,
	) {}
}

$latte->render('template.latte', new CatalogTemplateParameters(
	address: $userAddress,
	lang: $settings->getLanguage(),
	products: $entityManager->getRepository('Product')->findAll(),
));
```

Poi inserite all'inizio del template il tag `{templateType}` con il nome completo della classe (namespace incluso). In questo modo dichiarate che nel template esistono le variabili `$lang`, `$products` e `$address`, con i rispettivi tipi. Potete indicare anche i tipi delle variabili locali con i tag [`{var}` |tags#var-default], `{varType}` e [`{define}` |template-inheritance#Definizioni].

Da questo momento in poi il vostro IDE è in grado di offrire il completamento corretto.

Come risparmiare lavoro? Qual è il modo più semplice per scrivere la classe dei parametri del template o i tag `{varType}`? Farseli generare! A questo servono i due tag `{templatePrint}` e `{varPrint}`. Se li inserite in un template, al posto del rendering normale viene mostrata una proposta di codice della classe oppure un elenco di tag `{varType}`. Poi basta selezionare il codice con un clic e copiarlo nel progetto.


`{templateType}`
----------------
I tipi dei parametri passati al template si dichiarano tramite una classe:

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


`{varType}`
-----------
Come dichiarare i tipi delle variabili? Per le variabili esistenti usate il tag `{varType}`, oppure [`{var}` |tags#var-default]:

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


`{templatePrint}`
-----------------
Potete anche farvi generare la classe con il tag `{templatePrint}`. Se lo inserite all'inizio del template, al posto del rendering normale viene mostrata una proposta di codice della classe. Poi basta selezionare il codice con un clic e copiarlo nel progetto. Potete indicare facoltativamente il nome di una classe genitore, per esempio `{templatePrint ParentClass}`, e la classe generata la estenderà.


`{varPrint}`
------------
Il tag `{varPrint}` vi fa risparmiare tempo di scrittura. Se lo inserite in un template, al posto del rendering normale viene mostrata una proposta di tag `{varType}` per le variabili locali. Poi basta selezionare il codice con un clic e copiarlo nel template.

Di per sé `{varPrint}` elenca solo le variabili locali che non sono parametri del template. Se volete elencare tutte le variabili, usate `{varPrint all}`.

Sistema di tipi

Il sistema di tipi è fondamentale per sviluppare applicazioni solide. Latte porta il supporto ai tipi anche nei template. Conoscendo il tipo di dato o di oggetto di ogni variabile, permette:

  • all'IDE di completare correttamente il codice (vedi integrazione e plugin)
  • all'analisi statica di rilevare gli errori

Entrambe le cose aumentano notevolmente la qualità e la comodità dello sviluppo.

I tipi dichiarati hanno valore informativo e al momento Latte non li verifica.

Come iniziare a usare i tipi? Create una classe del template, per esempio CatalogTemplateParameters, che rappresenti i parametri passati, i loro tipi ed eventualmente i valori predefiniti:

class CatalogTemplateParameters
{
	public function __construct(
		public string $lang,
		/** @var ProductEntity[] */
		public array $products,
		public Address $address,
	) {}
}

$latte->render('template.latte', new CatalogTemplateParameters(
	address: $userAddress,
	lang: $settings->getLanguage(),
	products: $entityManager->getRepository('Product')->findAll(),
));

Poi inserite all'inizio del template il tag {templateType} con il nome completo della classe (namespace incluso). In questo modo dichiarate che nel template esistono le variabili $lang, $products e $address, con i rispettivi tipi. Potete indicare anche i tipi delle variabili locali con i tag {var}, {varType} e {define}.

Da questo momento in poi il vostro IDE è in grado di offrire il completamento corretto.

Come risparmiare lavoro? Qual è il modo più semplice per scrivere la classe dei parametri del template o i tag {varType}? Farseli generare! A questo servono i due tag {templatePrint} e {varPrint}. Se li inserite in un template, al posto del rendering normale viene mostrata una proposta di codice della classe oppure un elenco di tag {varType}. Poi basta selezionare il codice con un clic e copiarlo nel progetto.

{templateType}

I tipi dei parametri passati al template si dichiarano tramite una classe:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Come dichiarare i tipi delle variabili? Per le variabili esistenti usate il tag {varType}, oppure {var}:

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

{templatePrint}

Potete anche farvi generare la classe con il tag {templatePrint}. Se lo inserite all'inizio del template, al posto del rendering normale viene mostrata una proposta di codice della classe. Poi basta selezionare il codice con un clic e copiarlo nel progetto. Potete indicare facoltativamente il nome di una classe genitore, per esempio {templatePrint ParentClass}, e la classe generata la estenderà.

{varPrint}

Il tag {varPrint} vi fa risparmiare tempo di scrittura. Se lo inserite in un template, al posto del rendering normale viene mostrata una proposta di tag {varType} per le variabili locali. Poi basta selezionare il codice con un clic e copiarlo nel template.

Di per sé {varPrint} elenca solo le variabili locali che non sono parametri del template. Se volete elencare tutte le variabili, usate {varPrint all}.