Nette Documentation Preview

syntax
Sistema de tipos
****************

<div class=perex>

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 |recipes#Editores e IDE])
- que el análisis estático detecte errores

Ambas cosas aumentan notablemente la calidad y la comodidad del desarrollo.

</div>

.[note]
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:

```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(),
));
```

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}` |tags#var-default], `{varType}` y [`{define}` |template-inheritance#Definitions].

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:

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


`{varType}`
-----------
¿Cómo declarar los tipos de las variables? Use la etiqueta `{varType}` para las variables existentes, o bien [`{var}` |tags#var-default]:

```latte
{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}`.

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