Sistema de tipos
El sistema de tipos es crucial para desarrollar aplicaciones robustas. Latte también aporta soporte de tipos a las plantillas. Gracias a saber qué tipo de dato u objeto hay en cada variable, puede
- el IDE sugerir correctamente (ver integración)
- el análisis estático detectar errores
Ambos aumentan significativamente la calidad y la comodidad del desarrollo.
Los tipos declarados son informativos y Latte no los verifica en este momento.
¿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 por defecto:
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(),
));
Y luego, al principio de la plantilla, inserte la etiqueta {templateType}
con el nombre completo de la clase
(incluido el namespace). Esto define que en la plantilla existen las variables $langs
y $products
con
sus tipos correspondientes. Puede indicar los tipos de las variables locales usando las etiquetas {var}
, {varType}
, {define}
.
A partir de ese momento, su IDE puede sugerir correctamente.
¿Cómo ahorrar trabajo? ¿Cuál es la forma más fácil de escribir una clase con parámetros de plantilla o etiquetas
{varType}
? Haga que se generen. Para eso existen un par de etiquetas {templatePrint}
y
{varPrint}
. Si las coloca en una plantilla, en lugar de la renderización normal, se mostrará una propuesta de
código de clase o una lista de etiquetas {varType}
. Luego, simplemente puede 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? Para ello sirven las etiquetas {varType}
para variables existentes, o
{var}
:
{varType Nette\Security\User $user}
{varType string $lang}
{templatePrint}
También puede hacer que la clase se genere usando la etiqueta {templatePrint}
. Si la coloca al principio de la
plantilla, en lugar de la renderización normal, se mostrará una propuesta de clase. Luego, simplemente puede seleccionar el
código con un clic y copiarlo a su proyecto.
{varPrint}
La etiqueta {varPrint}
le ahorrará tiempo de escritura. Si la coloca en la plantilla, en lugar de la
renderización normal, se mostrará una propuesta de etiquetas {varType}
para las variables locales. Luego,
simplemente puede seleccionar el código con un clic y copiarlo a la plantilla.
{varPrint}
por sí solo solo imprime variables locales que no son parámetros de plantilla. Si desea imprimir
todas las variables, use {varPrint all}
.