Système de types
Le système de types est essentiel au développement d'applications robustes. Latte apporte la prise en charge des types jusque dans les templates. Comme il connaît le type de données ou d'objet de chaque variable, il permet :
- à l'IDE de compléter correctement le code (voir intégration et plugins)
- à l'analyse statique de détecter les erreurs
L'un comme l'autre augmentent considérablement la qualité et le confort du développement.
Les types déclarés sont informatifs et Latte ne les vérifie pas pour le moment.
Comment commencer à utiliser les types ? Créez une classe de template, par exemple CatalogTemplateParameters,
représentant les paramètres passés, leurs types et éventuellement leurs valeurs par défaut :
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(),
));
Insérez ensuite au début du template la balise {templateType} avec le nom complet de la classe (namespace
compris). Cela définit que les variables $lang, $products et $address existent dans le
template, avec leurs types respectifs. Vous pouvez aussi préciser les types des variables locales à l'aide des balises {var}, {varType} et {define}.
À partir de là, votre IDE peut vous proposer la bonne complétion.
Comment s'épargner du travail ? Quel est le moyen le plus simple d'écrire une classe de paramètres de template ou des
balises {varType} ? Faites-les générer ! C'est à cela que sert la paire de balises {templatePrint} et
{varPrint}. Si vous les placez dans un template, au lieu du rendu habituel s'affichera une proposition de code de la
classe ou une liste de balises {varType}. Il ne reste qu'à sélectionner le code d'un clic et à le copier dans
votre projet.
{templateType}
Les types des paramètres passés au template se déclarent à l'aide d'une classe :
{templateType MyApp\CatalogTemplateParameters}
{varType}
Comment déclarer les types des variables ? Utilisez la balise {varType} pour les variables existantes, ou {var} :
{varType Nette\Security\User $user}
{varType string $lang}
{templatePrint}
Vous pouvez aussi faire générer la classe à l'aide de la balise {templatePrint}. Si vous la placez au début du
template, au lieu du rendu habituel s'affichera une proposition de code de la classe. Il ne reste qu'à sélectionner le code d'un
clic et à le copier dans votre projet. Vous pouvez éventuellement indiquer le nom d'une classe parente, par exemple
{templatePrint ParentClass}, et la classe générée en héritera.
{varPrint}
La balise {varPrint} vous fait gagner du temps d'écriture. Si vous la placez dans un template, au lieu du rendu
habituel s'affichera une proposition de balises {varType} pour les variables locales. Il ne reste qu'à sélectionner
le code d'un clic et à le copier dans votre template.
Seule, {varPrint} ne liste que les variables locales qui ne sont pas des paramètres du template. Si vous voulez
lister toutes les variables, utilisez {varPrint all}.