Nette Documentation Preview

syntax
Sistema de Tipos
****************

<div class=perex>

O sistema de tipos é crucial para o desenvolvimento de aplicações robustas. O Latte traz suporte a tipos também para os templates. Graças ao fato de sabermos qual tipo de dado ou objeto está em cada variável,

- o IDE pode sugerir corretamente (veja [integração |recipes#Editores e IDEs])
- a análise estática pode detectar erros

Ambos aumentam significativamente a qualidade e o conforto do desenvolvimento.

</div>

.[note]
Os tipos declarados são informativos e o Latte não os verifica no momento.

Como começar a usar tipos? Crie uma classe de template, por exemplo, `CatalogTemplateParameters`, representando os parâmetros passados, seus tipos e, opcionalmente, seus valores padrão:

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

E, em seguida, no início do template, insira a tag `{templateType}` com o nome completo da classe (incluindo o namespace). Isso define que no template existem as variáveis `$langs` e `$products`, incluindo os tipos correspondentes. Você pode especificar os tipos de variáveis locais usando as tags [`{var}` |tags#var default], `{varType}`, [`{define}` |template-inheritance#Definições].

A partir desse momento, o IDE pode sugerir corretamente.

Como economizar trabalho? Qual é a maneira mais fácil de escrever uma classe com parâmetros de template ou tags `{varType}`? Deixe que sejam gerados para você. Para isso, existem duas tags: `{templatePrint}` e `{varPrint}`. Se você as colocar no template, em vez da renderização normal, será exibida uma sugestão de código da classe ou uma lista de tags `{varType}`. Basta então marcar o código com um clique e copiá-lo para o projeto.


`{templateType}`
----------------
Declaramos os tipos dos parâmetros passados para o template usando uma classe:

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


`{varType}`
-----------
Como declarar tipos de variáveis? Para isso, servem as tags `{varType}` para variáveis existentes, ou [`{var}` |tags#var default]:

```latte
{varType Nette\Security\User $user}
{varType string $lang}
```


`{templatePrint}`
-----------------
Você também pode ter a classe gerada usando a tag `{templatePrint}`. Se você a colocar no início do template, em vez da renderização normal, será exibida uma sugestão de classe. Basta então marcar o código com um clique e copiá-lo para o projeto.


`{varPrint}`
------------
A tag `{varPrint}` economizará seu tempo de escrita. Se você a colocar no template, em vez da renderização normal, será exibida uma sugestão de tags `{varType}` para variáveis locais. Basta então marcar o código com um clique e copiá-lo para o template.

O próprio `{varPrint}` lista apenas variáveis locais que não são parâmetros do template. Se você quiser listar todas as variáveis, use `{varPrint all}`.

Sistema de Tipos

O sistema de tipos é crucial para o desenvolvimento de aplicações robustas. O Latte traz suporte a tipos também para os templates. Graças ao fato de sabermos qual tipo de dado ou objeto está em cada variável,

  • o IDE pode sugerir corretamente (veja integração)
  • a análise estática pode detectar erros

Ambos aumentam significativamente a qualidade e o conforto do desenvolvimento.

Os tipos declarados são informativos e o Latte não os verifica no momento.

Como começar a usar tipos? Crie uma classe de template, por exemplo, CatalogTemplateParameters, representando os parâmetros passados, seus tipos e, opcionalmente, seus valores padrão:

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

E, em seguida, no início do template, insira a tag {templateType} com o nome completo da classe (incluindo o namespace). Isso define que no template existem as variáveis $langs e $products, incluindo os tipos correspondentes. Você pode especificar os tipos de variáveis locais usando as tags {var}, {varType}, {define}.

A partir desse momento, o IDE pode sugerir corretamente.

Como economizar trabalho? Qual é a maneira mais fácil de escrever uma classe com parâmetros de template ou tags {varType}? Deixe que sejam gerados para você. Para isso, existem duas tags: {templatePrint} e {varPrint}. Se você as colocar no template, em vez da renderização normal, será exibida uma sugestão de código da classe ou uma lista de tags {varType}. Basta então marcar o código com um clique e copiá-lo para o projeto.

{templateType}

Declaramos os tipos dos parâmetros passados para o template usando uma classe:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Como declarar tipos de variáveis? Para isso, servem as tags {varType} para variáveis existentes, ou {var}:

{varType Nette\Security\User $user}
{varType string $lang}

{templatePrint}

Você também pode ter a classe gerada usando a tag {templatePrint}. Se você a colocar no início do template, em vez da renderização normal, será exibida uma sugestão de classe. Basta então marcar o código com um clique e copiá-lo para o projeto.

{varPrint}

A tag {varPrint} economizará seu tempo de escrita. Se você a colocar no template, em vez da renderização normal, será exibida uma sugestão de tags {varType} para variáveis locais. Basta então marcar o código com um clique e copiá-lo para o template.

O próprio {varPrint} lista apenas variáveis locais que não são parâmetros do template. Se você quiser listar todas as variáveis, use {varPrint all}.