Ir para o conteúdo
ou

Software livre Brasil

Minha rede

 Voltar a Planeta do A...
Tela cheia Sugerir um artigo

Helio Costa - hlegius : Twig – Uma outra engine de templates em PHP

17 de Fevereiro de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 1493 vezes

Fui apresentado ao Twig não há muito tempo, mas logo me interessei pela proposta do projeto: simplicidade e flexibilidade ao trabalhar com templates em PHP.

Resumidamente é um projeto criado pelo Fabien Potencier - para quem não o conhece é o criador do symfony framework – e salvo engano há rumores de que ele pretende integrar o Twig à versão 2.x do symfony removendo o PHP super verboso que rola nos templates do symfony desde seu lançamento. * carece fontes concretas

Recursos bacanas e uma sintaxe à lá Django nos templates me chamou muita atenção para não só mais olhar, mas sim, testar para ver melhor a ferramenta.

Não demorou para eu testar como ele se portaria diante de objetos no template e para minha tristeza, para ele ler um atributo, depende nada mais, nada menos do que __get() e __isset(). É possível também, assim como na JSTL ler um atributo iniciado por get. No template você deveria chamá-lo sem esse get. i.e: getFoo() no template seria apenas foo.

Imediatamente, o que vem a mente de quem trabalha com OO ? Quebra brutal de encapsulamento. Sim, __get() por mais fácil que possa parecer, quebra totalmente a segurança de uma variável membro, uma vez que os atributos da mesma tornam-se públicos.

Tentei entrar em contato com o Fabien para ver o motivo que o levou a implementar assim. Ele, bem receptivo - ironia mode on - disse-me: se tiver um patch mande-o, do contrário, peço que seja paciente.

Fiz o patch, revi algumas coisas e mantive compatibilidade com o __get() __isset() que o Twig originalmente aceita e criei um Fork do projeto no GitHub.

Features default

  • Suporte a plugins
  • Variáveis
  • Leitura de arrays por índices int ou string
  • Arrays multidimensionais
  • Objetos (via __get() __isset() apenas)
  • Objetos alinhados (Nested Objects) com __get() __isset() também
  • Blocos de controle, loops, etc.

Mudanças

Métodos públicos começados por:

  • get
  • is
  • has
  • match
  • contain

Podem ser chamados no template sem qualquer problema sem a necessidade dos métodos mágicos.
Abaixo exemplos funcionais:

//...
/**
 * SomeVar
 * @var string
 */
 private $baz;
 /**
 * Bar Object
 * @var Bar
 */
 private $bar;
 /**
 * Magic String with __get
 * @var string
 */
 public $magic;

 public function __construct() {
    $this->baz = "Value of Foobar::\$baz";
    $this->bar = new Bar();
    $this->magic = 'Magic methods still working !';
 }

 /**
 * @return string
 */
 public function getBaz() {
     return $this->baz;
 }

 /**
 * @return boolean
 */
 public function hasBaz() {
     return (!empty($this->baz)) ? true : false;
 }

 private function hasIamNull() {
     return false;
 }

 public function fakehasFoo() {
     return 'I will not be displayed !';
 }

 public function matchesWith($otherString) {
     return ('foo' === $otherString);
 }

 public function getBar() {
     return $this->bar;
 } // ....

No template teriamos:

<body>
 <h1>Meu título</h1>
 <p>Bar foo</p>

 {% if foo.hasBaz %}
 <p>{{ foo.getBaz }}</p>
 {% endif %}

 {% if foo.hasIamNull %}
 <p>{{ foo.getBaz }}</p>
 {% endif %}

 <p>{{ foo.getAbstractBaz }}</p>

 <p>{{ foo.getIamPublic }}</p>

 <p>{{ foo.fakehasFoo }}</p>

 <p>{{ foo.getBar.getHlegius }}</p>

 <p>{{ foo.getBar.getBarFoo.getTwig }}</p>
 <p>{{ foo.getBar.getBarFoo.tryToCallMe }}</p> 

Fonte: http://www.hlegius.pro.br/twig-uma-outra-engine-de-templates-em-php/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.