SlideShare una empresa de Scribd logo
1 de 32
Twig en Symfony 2.1
     Para programadores y diseñadores
¿Qué es Twig?
 Twig is a modern template engine for PHP (definición de
  la web de twig)

 Rápido (compila los templates en código php
  optimizado)

 Seguro (tiene un modulo de sandbox para evaluar código
  no verificado)

 Flexible (permite al desarrollador definir sus própios
  custom tags)
¿Por qué otro motor de templates?
 PHP es el mismo un motor de templates (muy largo de
  escribir)



 Me explico:
 <?php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?>

 {{ var|e }}
Sintaxis orientada a Templates
 Hay muchos accesos directos (Shortcuts) para realizar
  las acciones mas comunes.

 Un ejemplo (cuando iteramos sobre un array vacio):
      {% for user in users %}
        * {{ user.name }}
      {% else %}
        No user have been found.
      {% endfor %}
Todas las funciones
 Con twig tenemos todas las opciones posibles a la hora
  de crear templates, tenemos herencia multiple, bloques
  de código, escape automático y muchas otras
  funcionalidades.

  {% extends "layout.html" %}
  {% block content %}
     Content of the page...
  {% endblock %}
Mas cosas que tiene twig
 Fácil de aprender
 Extensible (Permite crear tus propios tags, filtros, etc..)
 Unit Tested (Twig está testeado completamente y
  preparado para grandes proyectos)
 Documentado
 Seguro
 Mensajes de error claros
 Rápido
¿Quien está detrás de todo?
 @fabpot
¿qué nos da twig?
Básico de twig


 {# Comentario #}

 {{ mostrar_algo }}

 {% hacer algo %}
Variables


 {{ name }} === <?php echo $name; ?>
Tags


{% if online == false %}

   <p>Our website is in maintenance mode.

   Please, come back later.</p>

{% endif %}
Filters



 {{ 'my first car'|capitalize }}
Funciones


 {{ random() }}
     (funciona como la nativa de PHP `mt_rand`)

 {{ random(5) }}
Tests
{# Se evalúa a true si la variable is null, false, o cadena
vacía #}


  {% if foo is empty %}
     ...
  {% endif %}
NOTA:
 Twig no tiene el operador ===

 Para esto usamos una función “sameas”

  {% if foo.attribute is sameas(false) %}
     the foo attribute really is the ``false`` PHP value
  {% endif %}
Embed
 Include

 Extends

 Embed
  {% embed "lateral.twig” %}
       {% block principal %}
       ...
       {% endblock %}
  {% endembed %}
Documentación interesante


 http://twig.sensiolabs.org/
   http://twig.sensiolabs.org/documentation



 http://www.symfony.es/2012/06/17/desymfony2012-
  twig-los-mejores-trucos-y-tecnicas-avanzadas/
Vale, Fin de diapositivas
  Creamos un proyecto de symfony 2.1 para hacer cositas

php composer.phar create-project symfony/framework-
standard-edition twig-formacion

Copiamos composer.phar en twig-formacion y ejecutamos:

php composer.phar install

Chmod –R 777 app/cache

Chmod –R 777 app/logs

http://local.twig-formacion.com/app_dev.php/demo/hello/
Un poquito de Symfony
 Accedemos a
   DemoBundle -> Controller -> DemoController.php

 helloAction

 Template
   Resources/views/demo/hello.html.twig


 Interesante para pasar parámetros Symfony hace un
  return de un array con las variables a pasar a la vista.
Ejercicios
1. Pasar una variable nueva desde el controller a twig y printar
   por pantalla.

2. Imprimir un array ordenado
  1.   {{ array | sort }}

3. Escapar una variable
  1.   {{ string | e(„html‟) }}

4. Escapar una cadena de texto larga
  {% filter escape('html') %}
  <script type="text/javascript">
  Var texto="<p>Loremipsumdolorsitamet</p>";
  alert(texto);
  </script>
  {%end filter %}
Random
 Presenta por pantalla un numero aleatorio

 Presenta por pantalla un numero aleatorio menor que 10

 Presenta por pantalla un carácter aleatorio de un string

 Presenta por pantalla un elemento aleatorio de un array
Fechas

 Print dia de hoy
   {{„now‟ | date(“d”)}}

 Print fecha completa dd/mm/yyyy HH:mi:ss
   {{„now‟ | date(“d/m/Y H:i:s”)}}

 Print de la fecha y la hora de ahora en Argentina
   {{'now'|date("d/m/Y H:i:s","America/Argentina/Buenos_Aires")}}

 Print la fecha de aquí a 30 días
   {{date('+30days')|date}}
Date


 Ejemplo interesante

 Si tenemos una variable fechaNacimiento como hacemos
  la comprobación si el usuario es menor de edad ?

  {% if date(fechaNacimiento) < date(„-18years‟) %}
    Eres menor de edad
  {% endif %}
Otra de date
 Queremos imprimir la fecha del proximo viernes.



El curso de formularios en SF2 será el

{{date('next Friday')|date(„d/m/Y 14:00‟)}}
Arrays
 Tenemos el siguiente array
  {% set oferta = {
      'precio':30,
      'fechaExpiracion':date('+30days')
   }%}

  Como mostramos lo siguiente:
  La oferta cuesta 30 euros (35.4 con IVA) y es válida hasta el
  19/08/2012
Varias opciones
 ~ (concatenar con el MAC alt + ñ)

 {{'La oferta cuesta‟ ~ oferta.precio ~ 'euros(‟ ~
  oferta.precio*1.18 ~‟ con IVA)y es válida hasta el‟
  ~oferta.fechaExpiracion|date()}}

 Format()

 {{'La oferta cuesta %.2f euros(%.2f con IVA)y es válida
  hasta el
  %s'|format(oferta.precio, oferta.precio*1.18,oferta.fech
  aExpiracion|date())}}
Mas opciones
 Replace()

 {{'La oferta cuesta :precio euros( :total con IVA)y es
  válida hasta el
  :fecha'|replace({':precio':oferta.precio,':total':oferta.pr
  ecio*1.18,':fecha':oferta.fechaExpiracion|date()})}}

 La chula

 {{"La oferta cuesta #{oferta.precio}
  euros(#{oferta.precio*1.18} con IVA) y es válida
  hasta el #{oferta.fechaExpiracion|date()}"}}
Listas
 Dada una lista como esta

 {% set lista=['a','b','c','d'] %}



 Queremos imprimir solo b, c, d

 Solucion:
  {% for value in lista[1:] %}
           {{value}}
        {% endfor %}
Includes
{% extends request.ajax ? "base_ajax.html" : "base.html" %}

{% block content %}

  Este es el contenido a mostrar.

{% endblock %}
Ejercicios
 Crear un template que herede de otro y que cree un
  bloque con una capa con fondo de color rojo.
   Podemos usar el layout por defecto

 El que herede que sea de color azul
Include
 Crear un template hello2.html.twig que se incluya al
  principio del bloque content.
 NOTA: no se puede añadir contenidos en templates que
  hereden de otros, fuera de los bloques.
{% include 'AcmeDemoBundle::demo/hello2.html.twig' %}


Podemos usar include con el simbolo de concatenar (~)
incluso usando filtros.
{% include var|default('index') ~ '_foo.html' %}
Muchas Gracias
 Preguntas

 @fabpot

Más contenido relacionado

La actualidad más candente (20)

Trabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje cTrabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje c
 
Ejemplos de codigos c++
Ejemplos de codigos c++Ejemplos de codigos c++
Ejemplos de codigos c++
 
Estructuras de control en bash
Estructuras de control en bashEstructuras de control en bash
Estructuras de control en bash
 
07 funciones
07 funciones07 funciones
07 funciones
 
Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)
 
Codigoss c
Codigoss c Codigoss c
Codigoss c
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Palindromos
PalindromosPalindromos
Palindromos
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
 
Ejercicios de estructura secuencial
Ejercicios de estructura secuencialEjercicios de estructura secuencial
Ejercicios de estructura secuencial
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Palindromos
PalindromosPalindromos
Palindromos
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en C
 
Ejercicios Whule y Do While
Ejercicios Whule y Do WhileEjercicios Whule y Do While
Ejercicios Whule y Do While
 
AsignacióN DináMica
AsignacióN DináMicaAsignacióN DináMica
AsignacióN DináMica
 
Ejercicios con bucles repetitivos
Ejercicios con bucles repetitivosEjercicios con bucles repetitivos
Ejercicios con bucles repetitivos
 
Estructura básica de c parte 1
Estructura básica de c parte 1Estructura básica de c parte 1
Estructura básica de c parte 1
 
Algoritmos en c++
Algoritmos en c++Algoritmos en c++
Algoritmos en c++
 
Utilidad de las funciones en c
Utilidad de las funciones en cUtilidad de las funciones en c
Utilidad de las funciones en c
 

Similar a Twig

Similar a Twig (20)

Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
 
Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
 
Escuela
EscuelaEscuela
Escuela
 
Escuela
EscuelaEscuela
Escuela
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
 
Clase lenguaje c
Clase lenguaje c Clase lenguaje c
Clase lenguaje c
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
Clase09 java script
Clase09 java scriptClase09 java script
Clase09 java script
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Elemento 4
Elemento 4Elemento 4
Elemento 4
 
Diapo04
Diapo04Diapo04
Diapo04
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++
 

Último

JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALGuadalinfoHuscarGuad
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialEducática
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónAntonia Yamilet Perez Palomares
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaEdwinGarca59
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC6dwwcgtpfx
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosYOMIRAVILLARREAL1
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).jcaballerosamayoa
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docxssusere34b451
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blogManuel Diaz
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxJOELGARCIA849853
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.241534381
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaRicardoEstrada90
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...dramosbrise1403
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxCsarNlsonMrquezContr
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónUniversidad de Sonora
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx221112876
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .itzyrivera61103
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024NicolleAndrade7
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptxjarniel1
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxdoloresolmosantiago
 

Último (20)

JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 

Twig

  • 1. Twig en Symfony 2.1 Para programadores y diseñadores
  • 2. ¿Qué es Twig?  Twig is a modern template engine for PHP (definición de la web de twig)  Rápido (compila los templates en código php optimizado)  Seguro (tiene un modulo de sandbox para evaluar código no verificado)  Flexible (permite al desarrollador definir sus própios custom tags)
  • 3. ¿Por qué otro motor de templates?  PHP es el mismo un motor de templates (muy largo de escribir)  Me explico:  <?php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?>  {{ var|e }}
  • 4. Sintaxis orientada a Templates  Hay muchos accesos directos (Shortcuts) para realizar las acciones mas comunes.  Un ejemplo (cuando iteramos sobre un array vacio): {% for user in users %} * {{ user.name }} {% else %} No user have been found. {% endfor %}
  • 5. Todas las funciones  Con twig tenemos todas las opciones posibles a la hora de crear templates, tenemos herencia multiple, bloques de código, escape automático y muchas otras funcionalidades. {% extends "layout.html" %} {% block content %} Content of the page... {% endblock %}
  • 6. Mas cosas que tiene twig  Fácil de aprender  Extensible (Permite crear tus propios tags, filtros, etc..)  Unit Tested (Twig está testeado completamente y preparado para grandes proyectos)  Documentado  Seguro  Mensajes de error claros  Rápido
  • 7. ¿Quien está detrás de todo?  @fabpot
  • 9. Básico de twig  {# Comentario #}  {{ mostrar_algo }}  {% hacer algo %}
  • 10. Variables  {{ name }} === <?php echo $name; ?>
  • 11. Tags {% if online == false %} <p>Our website is in maintenance mode. Please, come back later.</p> {% endif %}
  • 12. Filters  {{ 'my first car'|capitalize }}
  • 13. Funciones  {{ random() }}  (funciona como la nativa de PHP `mt_rand`)  {{ random(5) }}
  • 14. Tests {# Se evalúa a true si la variable is null, false, o cadena vacía #} {% if foo is empty %} ... {% endif %}
  • 15. NOTA:  Twig no tiene el operador ===  Para esto usamos una función “sameas” {% if foo.attribute is sameas(false) %} the foo attribute really is the ``false`` PHP value {% endif %}
  • 16. Embed  Include  Extends  Embed {% embed "lateral.twig” %} {% block principal %} ... {% endblock %} {% endembed %}
  • 17. Documentación interesante  http://twig.sensiolabs.org/  http://twig.sensiolabs.org/documentation  http://www.symfony.es/2012/06/17/desymfony2012- twig-los-mejores-trucos-y-tecnicas-avanzadas/
  • 18. Vale, Fin de diapositivas Creamos un proyecto de symfony 2.1 para hacer cositas php composer.phar create-project symfony/framework- standard-edition twig-formacion Copiamos composer.phar en twig-formacion y ejecutamos: php composer.phar install Chmod –R 777 app/cache Chmod –R 777 app/logs http://local.twig-formacion.com/app_dev.php/demo/hello/
  • 19. Un poquito de Symfony  Accedemos a  DemoBundle -> Controller -> DemoController.php  helloAction  Template  Resources/views/demo/hello.html.twig  Interesante para pasar parámetros Symfony hace un return de un array con las variables a pasar a la vista.
  • 20. Ejercicios 1. Pasar una variable nueva desde el controller a twig y printar por pantalla. 2. Imprimir un array ordenado 1. {{ array | sort }} 3. Escapar una variable 1. {{ string | e(„html‟) }} 4. Escapar una cadena de texto larga {% filter escape('html') %} <script type="text/javascript"> Var texto="<p>Loremipsumdolorsitamet</p>"; alert(texto); </script> {%end filter %}
  • 21. Random  Presenta por pantalla un numero aleatorio  Presenta por pantalla un numero aleatorio menor que 10  Presenta por pantalla un carácter aleatorio de un string  Presenta por pantalla un elemento aleatorio de un array
  • 22. Fechas  Print dia de hoy  {{„now‟ | date(“d”)}}  Print fecha completa dd/mm/yyyy HH:mi:ss  {{„now‟ | date(“d/m/Y H:i:s”)}}  Print de la fecha y la hora de ahora en Argentina  {{'now'|date("d/m/Y H:i:s","America/Argentina/Buenos_Aires")}}  Print la fecha de aquí a 30 días  {{date('+30days')|date}}
  • 23. Date  Ejemplo interesante  Si tenemos una variable fechaNacimiento como hacemos la comprobación si el usuario es menor de edad ? {% if date(fechaNacimiento) < date(„-18years‟) %} Eres menor de edad {% endif %}
  • 24. Otra de date  Queremos imprimir la fecha del proximo viernes. El curso de formularios en SF2 será el {{date('next Friday')|date(„d/m/Y 14:00‟)}}
  • 25. Arrays  Tenemos el siguiente array {% set oferta = { 'precio':30, 'fechaExpiracion':date('+30days') }%} Como mostramos lo siguiente: La oferta cuesta 30 euros (35.4 con IVA) y es válida hasta el 19/08/2012
  • 26. Varias opciones  ~ (concatenar con el MAC alt + ñ)  {{'La oferta cuesta‟ ~ oferta.precio ~ 'euros(‟ ~ oferta.precio*1.18 ~‟ con IVA)y es válida hasta el‟ ~oferta.fechaExpiracion|date()}}  Format()  {{'La oferta cuesta %.2f euros(%.2f con IVA)y es válida hasta el %s'|format(oferta.precio, oferta.precio*1.18,oferta.fech aExpiracion|date())}}
  • 27. Mas opciones  Replace()  {{'La oferta cuesta :precio euros( :total con IVA)y es válida hasta el :fecha'|replace({':precio':oferta.precio,':total':oferta.pr ecio*1.18,':fecha':oferta.fechaExpiracion|date()})}}  La chula  {{"La oferta cuesta #{oferta.precio} euros(#{oferta.precio*1.18} con IVA) y es válida hasta el #{oferta.fechaExpiracion|date()}"}}
  • 28. Listas  Dada una lista como esta  {% set lista=['a','b','c','d'] %}  Queremos imprimir solo b, c, d  Solucion: {% for value in lista[1:] %} {{value}} {% endfor %}
  • 29. Includes {% extends request.ajax ? "base_ajax.html" : "base.html" %} {% block content %} Este es el contenido a mostrar. {% endblock %}
  • 30. Ejercicios  Crear un template que herede de otro y que cree un bloque con una capa con fondo de color rojo.  Podemos usar el layout por defecto  El que herede que sea de color azul
  • 31. Include  Crear un template hello2.html.twig que se incluya al principio del bloque content.  NOTA: no se puede añadir contenidos en templates que hereden de otros, fuera de los bloques. {% include 'AcmeDemoBundle::demo/hello2.html.twig' %} Podemos usar include con el simbolo de concatenar (~) incluso usando filtros. {% include var|default('index') ~ '_foo.html' %}