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