Sistema de tipos
El sistema de tipos es clave para desarrollar aplicaciones robustas. Latte lleva el soporte de tipos también a las plantillas. Al conocer el tipo de dato u objeto de cada variable, permite:
- que el IDE autocomplete correctamente (véase integración y plugins)
- que el análisis estático detecte errores
Ambas cosas aumentan notablemente la calidad y la comodidad del desarrollo.
Los tipos declarados son informativos y, por ahora, Latte no los comprueba.
¿Cómo empezar a usar tipos? Cree una clase de plantilla, por ejemplo CatalogTemplateParameters, que represente
los parámetros pasados, sus tipos y, opcionalmente, sus valores predeterminados:
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(),
));
Después, inserte al principio de la plantilla la etiqueta {templateType} con el nombre completo de la clase
(incluido el espacio de nombres). Con ello se define que en la plantilla existen las variables $lang,
$products y $address, junto con sus tipos. También puede indicar los tipos de las variables locales con
las etiquetas {var}, {varType} y {define}.
A partir de ese momento, su IDE puede ofrecer el autocompletado correcto.
¿Cómo ahorrar trabajo? ¿Cuál es la forma más fácil de escribir la clase de parámetros de la plantilla o las etiquetas
{varType}? ¡Que se generen solas! Para eso está el par de etiquetas {templatePrint} y
{varPrint}. Si las coloca en una plantilla, en lugar del renderizado normal se mostrará una propuesta del código de
la clase o una lista de etiquetas {varType}. Después basta con seleccionar el código con un clic y copiarlo a su
proyecto.
{templateType}
Los tipos de los parámetros pasados a la plantilla se declaran mediante una clase:
{templateType MyApp\CatalogTemplateParameters}
{varType}
¿Cómo declarar los tipos de las variables? Use la etiqueta {varType} para las variables existentes, o bien {var}:
{varType Nette\Security\User $user}
{varType string $lang}
{templatePrint}
También puede hacer que la clase se genere con la etiqueta {templatePrint}. Si la coloca al principio de la
plantilla, en lugar del renderizado normal se mostrará una propuesta del código de la clase. Después basta con seleccionar el
código con un clic y copiarlo a su proyecto. Opcionalmente puede indicar el nombre de una clase padre, por ejemplo
{templatePrint ParentClass}, y la clase generada la extenderá.
{varPrint}
La etiqueta {varPrint} le ahorra tiempo de escritura. Si la coloca en una plantilla, en lugar del renderizado
normal se mostrará una propuesta de etiquetas {varType} para las variables locales. Después basta con seleccionar
el código con un clic y copiarlo a su plantilla.
Por sí sola, {varPrint} solo lista las variables locales que no son parámetros de la plantilla. Si quiere listar
todas las variables, use {varPrint all}.