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}.