Powerful and flexibletemplates with TwigMichael Peacock, PHPNE December2012
@michaelpeacockHead Developer @groundsixAuthorOccasional conference speakermichaelpeacock.co.uktwitter.com/michaelpeacock
Installation Create a composer.json file          {              "require": {                  "twig/twig": "1.*"         ...
Setup$loader = new Twig_Loader_Filesystem(__DIR__ . /templates/);// ideally sits in a dependency injection container$twig ...
Basic usage$template = $twig->loadTemplate(mytemplate.html.twig);echo $template->render($array_of_template_variables);exit;
Template variablesAssociative array  Keys are used to access the data in the  templates  Values are displayed / rendered i...
Base templatesA base template defines “blocks” which can beoverridden by other templatesThe block can contain default cont...
Blocks                 {% block content %}                 {% endblock %} {% block content %} <p>This is some default cont...
Extending baseExtend your base template            {% include base.twig.html %}Override your blocks {% block content %} <p...
Includes{% include another_template.html.twig %}{% include template_name_in_variable %}{% include template_from_string(var...
A note on context    By default all included templates and base    templates inherit their template variables from    the ...
Printing variablesOutput is automatically escaped                 {{my_variable}}But you can tell twig to not escape some ...
Dynamic Magic{{ check if }} is an array and bar a valid element;   foo.bar foo  if not, and if foo is an object, check tha...
Explicit typesYou can also instruct twig to call a method onan object or access a property of an array asopposed to relyin...
Setting variablesYou can also create variables on-the-fly{% set new_variable = ‘variable’ %}Useful when working with objec...
Conditions{% if logged_in_user is not null %}<p>Welcome logged_in_user.name. <a href="/logout">Logout</a></p>{% else %}<p>...
Supported comparisons==!=<>>=<=
Ternary operators{{ logged_in ? logged_in_username : guest }}
Loops <ul> {% for item in array_or_iterable_object %}    <li>item.getName</li>    {% else %}    <li>No results found</li> ...
Loop dataIteration of a loop (1 indexed)                                  {{loop.index}}Parent loop iteration (1 indexed) ...
Concatenation         ~
Filters Many of them are twig wrappers for PHP functions   Date: {{   article.publication_date|date("d/m/Y") }}   Number f...
Custom filters      Create a function          First parameter is what appears before the filter, other parameters        ...
TwigPowerful, flexible templatesEasy to build and extendSyntax thats friendly for designersAllows some level of control in...
Upcoming SlideShare
Loading in...5
×

Powerful and flexible templates with Twig

685

Published on

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
685
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
30
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide
  • There are other loader types too; loading from string, or load from an array (keys are template names, values are templates as strings) You can create your own too, if you implement the Twig_LoaderInterface
  • Load the template into twig, then render by passing an array of variables
  • Powerful and flexible templates with Twig

    1. 1. Powerful and flexibletemplates with TwigMichael Peacock, PHPNE December2012
    2. 2. @michaelpeacockHead Developer @groundsixAuthorOccasional conference speakermichaelpeacock.co.uktwitter.com/michaelpeacock
    3. 3. Installation Create a composer.json file { "require": { "twig/twig": "1.*" } } Download composer curl -s http://getcomposer.org/installer | php Run composer to install twig php composer.phar install
    4. 4. Setup$loader = new Twig_Loader_Filesystem(__DIR__ . /templates/);// ideally sits in a dependency injection container$twig = new Twig_Environment($loader, array(cache => __DIR__ . /cache/templates,));
    5. 5. Basic usage$template = $twig->loadTemplate(mytemplate.html.twig);echo $template->render($array_of_template_variables);exit;
    6. 6. Template variablesAssociative array Keys are used to access the data in the templates Values are displayed / rendered in the templatesValues can be: Arrays Objects Data
    7. 7. Base templatesA base template defines “blocks” which can beoverridden by other templatesThe block can contain default content;overriding is optionalMakes it easy to change small amounts of abase template on only a few specific pages
    8. 8. Blocks {% block content %} {% endblock %} {% block content %} <p>This is some default content which will be displayed if the template is used directly or if it isnt overriden by another template</p> {% endblock %}
    9. 9. Extending baseExtend your base template {% include base.twig.html %}Override your blocks {% block content %} <p>This is overriding the base template</p> {% endblock %}
    10. 10. Includes{% include another_template.html.twig %}{% include template_name_in_variable %}{% include template_from_string(variable_containing_twig) %}
    11. 11. A note on context By default all included templates and base templates inherit their template variables from the template you are rendering You can change this by passing a list of variables when including a template{% include another_template.html.twig with other_variables only %} You can also pass more variables by omitting the only keyword
    12. 12. Printing variablesOutput is automatically escaped {{my_variable}}But you can tell twig to not escape some data(using a filter, which we will look at shortly) {{my_variable|raw}}
    13. 13. Dynamic Magic{{ check if }} is an array and bar a valid element; foo.bar foo if not, and if foo is an object, check that bar is a valid property; if not, and if foo is an object, check that bar is a valid method (even if bar is the constructor - use __construct() instead); if not, and if foo is an object, check that getBar is a valid method; if not, and if foo is an object, check that isBar is a valid method; if not, return a null value. Source: http://twig.sensiolabs.org/doc/templates.html#variables
    14. 14. Explicit typesYou can also instruct twig to call a method onan object or access a property of an array asopposed to relying on the dynamic magic{{object.method()}}{{array[‘variable’]}}
    15. 15. Setting variablesYou can also create variables on-the-fly{% set new_variable = ‘variable’ %}Useful when working with objects or arrays, asyou can pull out data, manipulate it and use it asa variable in its own right
    16. 16. Conditions{% if logged_in_user is not null %}<p>Welcome logged_in_user.name. <a href="/logout">Logout</a></p>{% else %}<p><a href="/login">Login</a></p>{% endif %}
    17. 17. Supported comparisons==!=<>>=<=
    18. 18. Ternary operators{{ logged_in ? logged_in_username : guest }}
    19. 19. Loops <ul> {% for item in array_or_iterable_object %} <li>item.getName</li> {% else %} <li>No results found</li> {% endfor %}</ul>
    20. 20. Loop dataIteration of a loop (1 indexed) {{loop.index}}Parent loop iteration (1 indexed) {{loop.parent.loop.index}}Other information loop.index0 (0 indexed iteration) loop.revindex (reversed index) loop.first (true if first iteration) loop.last (truue if last iteration) loop.length
    21. 21. Concatenation ~
    22. 22. Filters Many of them are twig wrappers for PHP functions Date: {{ article.publication_date|date("d/m/Y") }} Number format {{500123.0123|number_format}} Url encode {{variable|url_encode()}} Length (of string or items in array) {{variable| length}} You can use multiple filters e.g. {{var|trans|raw}} Lots more! http://twig.sensiolabs.org/doc/filters/index.html
    23. 23. Custom filters Create a function First parameter is what appears before the filter, other parameters are set when you use the filter if required (ideally, these should be optional)function twig_filter_gravatar($email, $default=mm, $size=30){return "http://www.gravatar.com/avatar/" . md5(strtolower(trim($email))) . "?d=" .urlencode($default) . "&s=" . $size;} Add the filter $twig->addFilter(gravatar, new Twig_Filter_Function(twig_filter_gravatar)); Use the filter {{user.getEmail|gravatar}} Unfortunately closures can’t be used yet
    24. 24. TwigPowerful, flexible templatesEasy to build and extendSyntax thats friendly for designersAllows some level of control in the templatesA bit of a double edged sword - with greattemplate flexibility comes great responsibility! http://twig.sensiolabs.org/
    1. Gostou de algum slide específico?

      Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

    ×