Introdução ao Twig

twig-logoOlá pessoal,

Hoje venho falar de uma das mais usadas linguagens de templates para PHP.

Um dos descuidos mais comuns quando usamos PHP para escrever templates em nossos projetos é definir variáveis e lógicas de processamentos nos templates. Embora esse descuido aconteça constantemente entre desenvolvedores PHP, vale lembrar que no padrão MVC a camada de visão é exclusivamente um arquivo template e os dados deverão exclusivamente ser importados da controller.

O que é Twig?

O Twig é uma linguagem de template open-source, criada e mantida desde 2009 pela SensioLabs(mantenedora do Symfony). Embora seja embarcada por padrão somente no Symfony, ela também poderá ser adicionada no Yii, Laravel, Zend Framework e diversas outras frameworks PHP.

Vantagens e usar o Twig

  • Mantém o padrão ideal de templates da camada de visão, eliminando existência de processamentos lógicos que deveriam estar camada de controle;
  • Rápido, quando configurado para armazenar cache o Twig torna-se inclusive mais rápido que o próprio PHP;
  • Permite o desenvolvedor criar suas próprias tags(normalmente usadas para formatação de dados);
  • Mantido ativamente pela SensioLabs com forte contribuição da comunidade PHP;
  • Fácil escrita, eliminando encurtando ainda mais o código escrito no template em comparação com o próprio PHP.

Instalando o Twig

Symfony

Por padrão o Symfony já utiliza o Twig como linguagem para escrita de templates. Neste caso não será necessário instalar nada.

Yii 2

No Yii 2 a equipe de desenvolvimento do core criou uma extensão oficial para o Twig. Para instalar você deverá adicionar o pacote yiisoft/yii2-twig utilizando o composer.

Execute o comando abaixo em seu terminal estando no diretório de seu projeto.

$ composer require --prefer-dist yiisoft/yii2-twig

Para utilizar a extensão basta adicionar o código abaixo na configuração da sua aplicação.

return array(
    //...
    'components' => array(
        'view' => array(
            'renderers' => array(
                'twig' => array(
                    'class' => 'yii\twig\ViewRenderer',
                    // set cachePath to false in order to disable template caching
                    'cachePath' => '@runtime/Twig/cache',
                    // Array of twig options:
                    'options' => array(
                        'auto_reload' => true,
                    ),
                    // ... see ViewRenderer for more options
                ),
            ),
        ),
    ),
);

Zend Framework 2

A equipe da Zend não implementa oficialmente nenhum componente de suporte ao Twig, porem existe um módulo de terceiros muito utilizado para fazer essa implementação, o ZfcTwig. Basicamente, o ZfcTwig adiciona o suporte do Twig no Zend Framework 2 de forma que todos os view helpers estejam disponíveis também quando escrevemos os templates.

Para adicionarmos o ZfcTwig em nosso projeto, acesse o diretório de seu projeto pelo terminal e executar o comando abaixo.

$ composer require zf-commons/zfc-twig

Em seguida, adicione o módulo ZfcTwig em seu arquivo config/application.config.php na key ‘modules’.

Feio isso, o Zend Framework 2 já passa a reconhecer o Twig. Agora vamos fazer mais algumas otimizações para termos um debug intuitivo e tornar a renderização do Twig ainda mais rápido que templates em PHP.

Inicialmente, abra o arquivo config/autoload/local.php de seu projeto e adicione a configuração abaixo. Lembrando que como a configuração já existe, o array do exemplo abaixo deverá ser mesclado com o array da configuração de seu projeto.

return array(
    //...
    'zfctwig' => array(
        'environment_options' => array(
            'debug' => true,
        )
    )
);

Com a configuração acima, ativamos o modo debug e quando ocorrer erros de template em seu projeto será facilmente identificado pelas exceções geradas pela framework.

Agora vamos configurar o cache para a renderização do template em Twig tornar-se ainda mais rápido que o template em PHP. Para isso, abra o arquivo config/autoload/global.php de seu projeto e adicione a configuração abaixo. Lembrando que assim como no caso acima, seu arquivo de configuração já possuirá um array, o array abaixo deverá ser mesclado com o já existente em suas configurações.

return array(
    //...
    'zfctwig' => array(
        'environment_options' => array(
            'cache' => __DIR__ . '/../../data/cache/templates',
        ),
    )
);

Feito isso, o Zend Framework 2 está preparado e otimizado para trabalharmos com o Twig.

Laravel

Oficialmente o Laravel não suporta o Twig, porém por meio de uma biblioteca de terceiros muito conhecida(o TwigBridge) é possível adicionarmos o suporte na framework. Para instalarmos o TwigBridge, utilizaremos o composer.

Fique atento em relação a versão do Laravel no qual está sendo utilizado em seu projeto e a versão da biblioteca que será instalada. No terminal abra a pasta de seu projeto e digite o comando abaixo de acordo com a versão do Laravel utilizada em seu projeto.

  • Laravel 5 deverá utilizar TwigBridge a partir da versão 0.7;

    		$ composer require rcrowe/twigbridge 0.8.x
    		
  • Laravel 4.1/4.2 deverá utilizar TwigBridge versão 0.6;

    		$ composer require rcrowe/twigbridge 0.6.x
    		
  • Laravel 4.0 deverá utilizar TwigBridge versão 0.5.

    		$ composer require rcrowe/twigbridge 0.5.x
    		

Em seguida, adicione o serviço TwigBridge\ServiceProvider em seu arquivo config/app.php.

Após o serviço habilitado na framework, vamos copiar as configurações da biblioteca para a pasta config. Para isso utilizaremos o Artisan.

$ php artisan vendor:publish --provider="TwigBridge\ServiceProvider"

Template em Twig vs Template em PHP

Para demonstrar a simplicidade do Twig, abaixo vai um exemplo bem simples de um template escrito em PHP e em seguida o mesmo exemplo escrito em Twig.

Template em PHP

<html>
    <head>
        <title>Welcome to Symfony!</title>
    </head>
    <body>
        <h1><?php echo $page_title ?></h1>

        <ul id="navigation">
            <?php foreach ($navigation as $item): ?>
                <li>
                    <a href="<?php echo $item->getHref() ?>">
                        <?php echo $item->getCaption() ?>
                    </a>
                </li>
            <?php endforeach ?>
        </ul>
    </body>
</html>

Template em Twig

<!DOCTYPE html>
<html>
    <head>
        <title>Welcome to Symfony!</title>
    </head>
    <body>
        <h1>{{ page_title }}</h1>

        <ul id="navigation">
            {% for item in navigation %}
                <li><a href="{{ item.href }}">{{ item.caption }}</a></li>
            {% endfor %}
        </ul>
    </body>
</html>

Conceitos básicos

Abaixo estão os conceitos básicos principais para começar a escrever seu template em Twig.

Sintaxe Descrição
{{ … }} Usado para imprimir uma variável ou o resultado de uma expressão.
{% … %} Tag para controlar lógica do template; Usada para executar instruções como por exemplo for-loops.
{# … #} Usado para escrever comentários, equivalente ao /* … */ do PHP. O comentário poderá ser escrito em uma única linha ou multiplas linhas.

O Twig contém filtros que modificam o conteúdo antes de ser renderizado. No exemplo abaixo estarei utilizando um filtro na variável “exemplo” para imprimir todos os caracteres em caixa alta.

{{ exemplo|upper }}

Caso não exista um filtro que atenda sua necessidade, você também poderá criar um filtro customizado. Um exemplo de customização, é o filtro TwigCountry que criei para substituir o código ISO 3166-1 do país para o nome completo do mesmo.

Conclusão

Templates em PHP ficam em desvantagem por permitir que o desenvolvedor acabe desenvolvendo lógicas de controle na camada de visão, o que na maioria das vezes acabam tornando o projeto inseguro.

Levando em consideração a quantidade de código escrito para desenvolver um template em Twig e um template em PHP, o Twig tem uma vantagem bem superior em relação a facilidade de escrita e consequentemente na minha opinião o desenvolvedor acaba tendo um entendimento mais rápido do que foi escrito.

Em breve estarei postando outros guias em que estarei me aprofundando mais em algumas características do Twig. 🙂

Links úteis

  1. Documentação oficial do Twig(em inglês)
  2. GitHub do Yii2 Twig, extensão oficial do Twig para o Yii 2(em inglês)
  3. GitHub do ZfcTwig, biblioteca de terceiros para o Zend Framework 2(em inglês)
  4. GitHub do TwigBridge, biblioteca de terceiros para o Laravel(em inglês)
  5. Documentação do Symfony para criação de templates(em inglês)
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s