View VH

O Hello fornece uma sintaxe simples e flexível para renderização fácil de arquivos de visualização no lado do servidor.

Introdução

O motor de template do Hello Microframework, conhecido como VH, foi desenvolvido com o objetivo de ser simples e extensível. Foi projetado para oferecer recursos mais enxutos, porém suficientes para desenvolver templates completos de forma simples. O VH proporciona uma maneira fácil e organizada de renderizar arquivos de visualização no lado do servidor.

Para utilizar a sintaxe VH, basta colocar seus arquivos de template com extensão "*.view.php" na pasta "resources/views" do seu projeto. O VH foi inspirado em outros motores de template, como o Blade, porém de forma mais simplificada.

O VH utiliza um sistema de cache. Isso significa que quando um arquivo de template é criado e renderizado, ele cria um segundo arquivo em cache. Nas próximas requisições, o acesso ao arquivo não será feito no arquivo original, mas sim no arquivo que está armazenado em cache. Dessa forma, é possível obter um desempenho melhor, uma vez que o servidor não precisa reprocessar o template a cada requisição.

Quando o arquivo original é modificado e atualizado pelo desenvolvedor, o arquivo de cache correspondente também é atualizado. Isso permite que o fluxo de cacheamento seja repetido, garantindo que as alterações no template sejam refletidas corretamente.

O uso do sistema de cache no VH ajuda a melhorar o desempenho e a eficiência do processo de renderização de templates.

Alternativas ao VH

É possível usar um motor de template diferente do oferecido nativamente pelo Hello Microframework. Para fazer isso, você pode registrar o seu motor de template como um serviço. No entanto, é importante ressaltar que incentivamos os desenvolvedores a utilizar ferramentas reativas, como VueJS, ReactJS, Angular, entre outras.

Acreditamos que a responsabilidade principal de renderizar a interface deve estar no dispositivo do usuário final que está acessando a aplicação. Dessa forma, o foco principal da aplicação pode ser direcionado para o processamento e o fornecimento de dados brutos, lidando com a lógica de negócio. As ferramentas reativas oferecem recursos robustos para a criação de interfaces de usuário interativas e dinâmicas.

No entanto, não há impedimento em utilizar o motor de template nativo VH, baseado em PHP, ou qualquer outro motor de template similar de sua escolha, se assim preferir. A escolha do motor de template depende das necessidades e preferências do projeto e da equipe de desenvolvimento.

Você poderá usar o Hello CLI com o comando make para criar um arquivo de template., usando a seguinte sentaxe:

php hello make:view nome-do-arquivo

Impressão de variáveis

Impressão de variáveis do tipo texto ou numérica:

<h1>{{ $name }}</h1> 

Impressão de variáveis de conteúdo do tipo HTML:

<h1>{! $name !}</h1> 

Token CSRF

Você pode exibir as seguintes variáveis no template VH padrão para o campo de CSRF e o token de CSRF:

<!-- Imprime o token CSRF -->
{{csrf_token}}
<!-- Imprime o token CSRF dentro de um input do tipo hidden -->
{{csrf_field}}

Estrutura condicional

O VH oferece diretivas para trabalhar com estruturas condicionais de maneira simples e elegante dentro do seu arquivo de visualização.

{if 5 > 4}
    <h1>True</h1>
{/if}

{if 10 < 20}
    <h1>True</h1>
{else}
    <h1>false</h1>
{/if}

{if 10 < 8}
    <h1>True</h1>
{elseif 5 > 8}
     <h1>Truex</h1>
{else}
    <h1>false</h1>
{/if}

Aplicando estilos condicionais

É possível utilizar funções auxiliares para aplicar estilos e classes CSS de forma condicional.

Estrutura de repetição

O VH oferece diretivas para trabalhar com estruturas de repetições de maneira simples e elegante dentro do seu arquivo de visualização.

{for $items as $item }
     <h1>{# $item->id #}</h1>
{/for}


{for $item in $items}
     <h1>{# $item->id #}</h1>
{/for}

Função de inclusão:

Você pode incluir qualquer arquivo externo de template HTML com VH no seu arquivo atual sem precisar especificar a extensão do arquivo. Basta informar apenas o nome do arquivo, sem o "view.php". Por exemplo, se você deseja incluir o "header" no seu "index", pode dividir o seu layout em partes, como header, sidebar, content e footer, em arquivos de templates VH separados.

Além disso, é possível acessar subpastas de arquivos de template utilizando o ponto (.) em vez da barra (/), o que facilita a legibilidade da sintaxe. A inclusão de um template dentro de outro template VH é uma forma simples de estender as funcionalidades do seu projeto e melhorar a organização visual do sistema, facilitando futuras manutenções.

Lembre-se de que a função de template include funciona de maneira semelhante à função auxiliar view, que retorna um arquivo de template renderizado. Na verdade, a função include utiliza a função view nos bastidores para fornecer esse recurso.

{include 'header'}

{include 'layouts.header'}

Além disso, é possível incluir arquivos de templates VH diretamente de repositórios de módulos utilizando o símbolo "@" seguido do nome do diretório do módulo e do caminho ou nome do arquivo de template. Por exemplo: @Modulo.home. Dessa forma, a função include irá carregar diretamente o arquivo de template que esteja dentro do diretório "View" existente na estrutura do módulo. Isso proporciona uma maneira conveniente de organizar e reutilizar templates de módulos em seu sistema.

{include '@modulo.header'}

{include '@modulo.layouts.header'}

Ao utilizar a função ou diretiva 'include', que utiliza internamente a função auxiliar 'view', é possível declarar um segundo parâmetro para injetar variáveis como dependência, de forma semelhante à função 'view'. Essas variáveis podem ser recuperadas no próximo visualizador.

{include 'teste2',["server"=>"12345"]}

Construindo componentes com sections

Um dos melhores recursos da linguagem de template VH, também conhecida como View HTML, é a possibilidade de componentizar trechos de código. Uma section no VH é essencialmente um bloco isolado de código HTML e JavaScript, que pode ser reutilizado em qualquer parte do sistema. Isso permite criar componentes, como modais e botões, escrevendo o código apenas uma vez e reutilizando-o em várias partes do seu template. As sections podem ser criadas em arquivos de templates distintos e usadas para estender as funcionalidades de outros componentes, criando uma estrutura modular.

Além disso, é possível passar valores para dentro dos componentes, utilizando um segundo parâmetro do tipo array associativo. As chaves desse array podem ser acessadas utilizando o símbolo "@" na frente. No entanto, dentro de uma section, não é possível utilizar aspas duplas diretamente. Para fazer uso delas, é necessário escapá-las da seguinte forma: """.

Para criar um componente usando a section, utilize a seguinte sintaxe: {section 'nome_da_sua_section'}. Em seguida, para exibir a section, utilize a função de template show da seguinte forma: {show 'nome_da_sua_section'}. É possível passar valores de propriedades para dentro do componente da seguinte forma: {show 'nome_da_sua_section', ['nome' => 'Paulo']}. Para acessar o valor do array informado no show dentro da sua section, basta utilizar o símbolo "@" na frente do nome do índice, como no exemplo: @nome. Caso você não informe um array, o valor a ser acessado terá o nome de "@scope".

<!--Criação da section para componentizar uma tag h1-->
{section 'title'}
     <h1 class='bg-primary'>Esse é um título criado com section.</h1>
{/section}

<!--Renderização/exibição do title acima-->
{show 'title'}

Podemos mudar o dizer do título ou até mesmo a cor da seguinte forma.

{section 'title'}
     <h1 class='bg-@color'>@title</h1>
{/section}

{show 'title', ['title'=>'Meu título','color'=>'danger']}

Passando um valor diferente de um array.

{section 'title'}
     <h1>@scope</h1>
{/section}

{show 'title', 'Título da página'}

PHP bruto

Em algumas situações, pode ser necessário escrever código PHP puro dentro de um arquivo de template VH. Para fazer isso, você pode usar a diretiva php. Essa diretiva permite que você insira blocos de código PHP diretamente no seu arquivo de template VH, sem a necessidade de escapar ou modificar a sintaxe.

Aqui está um exemplo de como usar a diretiva php:

<h1>Hello</h1>
{php}
     $sum = 10 + 5;
{/php}

<h1>SUM: {{$sum}}</h1>

Nesse exemplo, o bloco de código PHP está envolvido pela diretiva php. Você pode escrever qualquer código PHP válido dentro desse bloco, incluindo declarações, expressões, loops, condicionais, etc. O código será interpretado e executado quando o arquivo de template for renderizado.

Lembre-se de que, ao utilizar a diretiva php, você está inserindo código PHP diretamente no seu arquivo de template VH, o que pode afetar a legibilidade e a manutenção do código. Portanto, é importante usar essa diretiva com moderação e considerar se existem alternativas mais adequadas, como a criação de funções ou variáveis no arquivo do controlador.

Diretiva JSON

A função {json} é utilizada para converter um array em um objeto JSON. Essa função é amplamente empregada na interação entre código PHP e JavaScript, especialmente para retornar dados de um modelo de banco de dados em formato de array ou objeto de array em JavaScript.

Exemplo de código usando a diretiva json:

{php}
    $x = ['a'=>10,'b'=>'20'];
{/php}

{json $x}

Exemplo de saída do código acima:

{
  "a": 10,
  "b": "20"
}

Last updated