Usando TWIG para

desarrollar la Vista

en PHP

PHP ye olde way

<html>
<head><title><?php echo $title; ?></title>
<?php include_once head.php ?>
</head>
<body>
    <?php 
        echo htmlspecialchars($myvar,ENT_QUOTES);
    ?>
<ul>
<?php foreach ($myarray as $item ) { ?>
<li><?php echo $item['nombre'].' '.$item['apellido']; ?></li>
</ul>
</body>
</html>

Usando TWIG 😎

<html>
<head><title>{{ title }}</title>
{% block head %}
{$ endblock %}
</head>
<body>
    {{ myvar }}
<ul>
{% for $item in $myarray %}
<li>{{ item.nombre }} {{ item.apellido }} </li>
{% endfor %}
</ul>
</body>
</html>

Getting Started!!

Necesitarás:

  • Composer
  • PHP >= 5.4
  • NodeJS con NPM*
  • YEOMAN*

Declarando y mostrando Variables

{{ miVariable }} {# imprime $miVariable #}

{{ diccionario.anemona }} {#
imprime:
1 $diccionario['anemona']
2 $diccionario->anemona
3 $diccionario->anemona()
4 $diccionario->getAnemona()
5 $diccionario->isAnemona()
6 Null o error en caso de strict_variable
#}

{{ }}  Significa imprime lo que esta adentro

{% %}  Significa ejecuta lo que esta adentro

{% set admin = true %} {# declara admin como true #}

Variables globales

{{ _context }} 
{# imprime el contexto actual #}
{{ _charset }}
{# imprime el charset actual #}

Filtros

Son funciones que se pueden aplicar a el texto previo a ser impreso.

Las funciones son similares a el pipelining de Linux con el symbolo '|'

{{ titulo | striptags | title }} 
{# le quita las etiquetas y le da formato de titulo #}
{{ minisculas | lower }}
{# convierte todo el texto  de $minusculas en miniúsculas #}
{% filter upper %}
texto en minisculas
{% endfilter %}
{# convierte todo el texto dentro del bloque en mayúsculas #}
{{ data|convert_encoding(from='iso-2022-jp', to='UTF-8') }}
{# convierte data de ISO-2022-JP a UTF-8 #}
{{ codigohtml | raw }}
{# muestra $codigohtml sin escapar #}

Estructuras de Control y Ciclos

Condicionales

{% if admin %}
<h1> Bienvenido Admin </h1>
{% endif %}
{# solo muestra el bloque si $admin es true #}
{% if nombre| length < 6 %}
{{ nombre }}
{% else %}
{{ nombre|slice(0, 5) }}
{% endif %}
{# despliega el nombre si tiene longitud menor a 5
si no lo corta a 5 #}
{% if kenny.sick %}
    Kenny is sick.
{% elseif kenny.dead %}
    You killed Kenny! You bastard!!!
{% else %}
    Kenny looks okay --- so far
{% endif %}
{# nos dice como está Kenny :) #}

Ciclos

{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

{# imprime los números de el 0 al 10 #}
{% for user in users %}
    {{ loop.index }}
    {{ user.username }}
{% endfor %}
{# imprime $user['username'] #}
  • loop.index
  • loop.index0
  • loop.first
  • loop.last
  • loop.length

Modular el Diseño con Bloques

Modular el Diseño con Bloques

<!doctype html>
<html>
<head>
{% block head %}
{% endblock %}

</head>
<body>
<header>
{%block header %}
{% endblock %}
<nav>{% block navbar %}</nav>
</header>
<main>
{% block main %}
{% endblock %}
</main>
<footer>
{% block footer %}

Made with Twig.
{% endblock %}
</footer>
</body>
</html>

layout.twig

footer.twig

{% extends layout.twig %}
{% block footer %}
© Copyright 2015 by EmpresaImportatante.
{{ parent() }}
{% endblock %}

Frameworks y CMS

que pueden

integrarse con Twig 

 

  • Drupal 8

  • Symfony

  • Laravel

  • Silex

  • NodeJS *

  • Express*

* Requiere Twig JS

Rodrigo Reyes

http://rodkings.plethora.com.mx/

@kouryuu (Github)

@scrooge_mc_pato (Twitter)

rodrigo@plethora.com.mx

¡GRACIAS !

Preguntas y comentarios

(no sean tímidos)

TWIG PHP WAY

By Rodrigo Reyes