Symfony Live 2011being dangerous with Twiga short story by Ryan WeaverFebruary 9, 2011
being dangerous with Twig     A 5-step guide to using Twig – the fast, secure and           extensible PHP templating engi...
@weaverryan    » symfony    » documentation    » collaboration    » the lovely @leannapelham
iostudio: flying the symfony flag  ●      Advertising & Integrated Marketing Solutions  • coming to you from      » Nashvi...
act 1        Why Twig?
because templateengines are awesome
Template enginesA template engine allows you to render apresentation (HTML, XML, etc) via a templatein a controlled enviro...
a template engine     is a tool
why not just render PHP templates?
PHP templating woes» rendering template files is a hack: an include  statement with output-buffering control» no or faked ...
we need the brevity   of templateswith the isolation of  object-oriented   programming
so give me some Twiggy pudding Twig is:                  Twig offers:    » fast                    » true inheritance    »...
Twig is concise and each templatecompiles to an actual     PHP object
seeing is believing
a moment oftemplating zen
“The template system is meant toexpress presentation, not program             logic.”             - Django documentation
Twig can easily be used anywhere
act 2        Twigs simple life
Twigs three tagsTwig parses just three simple tags:   » comment tag   » print tag   » block tag
a. do nothing (comment tags){# comment #}   » totally ignored when rendered
b. say something (print tags){{ print me! }}   » prints the given expression   » think “<?php echo”   » If youre ultimatel...
c. do something (block tags){% set foo = inside a block tag %}  » used mostly for control-flow statements like if, for,   ...
Twigs three tags  » do nothing: {# comment tag #}  » say something: {{ print tag }}  » do something: {% block tag %}   its...
act 3        Everything is an          expression
expressions: Twig guts  » like PHP, most everything inside a tag    is an expression  » expressions are the most interesti...
Expressions   Block names              Block-specific tokens
an expression can consist of many different things
strings, variables, arrays, functions, filters, tests,       subscripts...
strings, numbers and variables  » like any language, strings, numbers and    variables are commonplace
arrays and hashes  » arrays use [], hashes use {}
operators  » twig has operators just like PHP, but extensible    and with some extras
filters   » a filter always follows a pipe (|) and modifies the     value that precedes it   » a filter may or may not tak...
functions  » just like PHP, returns a value based on some input
twig expresses himself  » strings, numbers and variables  » arrays and hashes  » operators  » filters  » functions   hey –...
act 4  twig on the battlefield
the test... » a template that displays a list of “widgets” in   odd-even rows » render tags and other info about each widg...
block tagprint tag
Lets clean things up
filter to title-case   the widget namefilters to strip tagsand shorten thewidgets description
your presenter is lying to you...   » the “truncate” filter isnt part of Twig, but     is available via a repository of ex...
odd/even classes   like a boss
Twig function cycles throughthe given array items               Special variable available inside               all “for” ...
flex some filters
apply the date filterchain filters to turn a list of tagsinto a comma-separated list
convenience, readability
even managementknows what this does
pagination?
function returns a positive      radius of numbers around the      center (e.g. 3, 4, 5, 6, 7)the awesome loop variable te...
the audacity: your speaker just lied again » but.... the “radius” function doesnt actually   exist in Twig.  but since its...
act 5        Twig extensions
Twig extensions everything in Twig is loaded by an “Extension” class:   » filters   » functions   » operators   » tests (e...
step 1: create a class that extends Twig_Extension
step 2: tell Twig about the extension
step 2: tell Twig about the extension (Symfony2)* dont forget to import this file from your  applications configuration (i...
step 3: add some guts to the extension class
step 4: Celebrate!!!* buy a round of drinks* watch the sun set* kiss that cute girl at the  coffee shop
I want more! ok great – do some reading!   » http://www.twig-project.org/doc/advanced.html   » http://www.twig-project.org...
act 6        after-dinner mint             mmm
screw with the Twig syntax   » because Twig is totally sandboxed (i.e. you    control exactly what can and cannot be done ...
cool, what about     debugging?a debug tag ships with the twig-extensions
the “debug” extension is available for youin Symfony2 - just enable it
prints every variable              availableprints the foo variable
but weve only justscratched the surface
theres much much more   » inheritance                   name can be:                                    * an item on an ar...
Twig, hes a people-person   » Twigs loves contributions, so *get involved*!   » https://github.com/fabpot/twig   » https:/...
thank you                        Ryan Weaver                        iostudio                        @weaverryan           ...
Being Dangerous with Twig
Being Dangerous with Twig
Being Dangerous with Twig
Being Dangerous with Twig
Being Dangerous with Twig
Being Dangerous with Twig
Upcoming SlideShare
Loading in...5
×

Being Dangerous with Twig

21,159

Published on

A presentation about Twig - the friendly templating engine written in PHP - given in San Francisco for Symfony Live 2011.

Published in: Technology
1 Comment
27 Likes
Statistics
Notes
No Downloads
Views
Total Views
21,159
On Slideshare
0
From Embeds
0
Number of Embeds
48
Actions
Shares
0
Downloads
161
Comments
1
Likes
27
Embeds 0
No embeds

No notes for slide

Being Dangerous with Twig

  1. 1. Symfony Live 2011being dangerous with Twiga short story by Ryan WeaverFebruary 9, 2011
  2. 2. being dangerous with Twig A 5-step guide to using Twig – the fast, secure and extensible PHP templating engine – to create clean template code, leverage powerful filters, make your designers write you love letters, write template functions that dont clog up yourglobal PHP namespace, take advantage of true template inheritance, hang out withDjango programmers and be able to talk template syntax, enjoy true and non- invasiveoutput escaping, have more time for your family, control whitespace, add global variables to all templates, stop lying when you try to tell yourself that <?php echo looks better than a simple {{, use the fancy for-else control, Rock some macros – little reusable code functions, do awesome stuff like “{% if i is divisibleby 2 %}”, mediate in the simplicity of your templates and drink more green tea, sandbox your template and whitelist capabilities – allowing Twig to be used in a CMS, take advantage of the fact that all templates compile to PHP classes that can extend a base class of your choosing, impress your friends by changing the print tag from {{ var }} to [all-your-base] var [are-belong-to-us], confuse the guy next to you by changing “is” and “is not” to mean the opposite things and convince him that hes misunderstood how logical expressions are used in programming languages all along, create a custom tag that takes the body of its block and tweets it, write templates the expresses presentation and not program logic. Ryan Weaver Symfony Live 2011
  3. 3. @weaverryan » symfony » documentation » collaboration » the lovely @leannapelham
  4. 4. iostudio: flying the symfony flag ● Advertising & Integrated Marketing Solutions • coming to you from » Nashville, TN » Washington, D.C. • 150 employees • and were hiring!
  5. 5. act 1 Why Twig?
  6. 6. because templateengines are awesome
  7. 7. Template enginesA template engine allows you to render apresentation (HTML, XML, etc) via a templatein a controlled environmentIt should allow special functionality thatmakes creating templates easier (helpers,template inheritance, etc)
  8. 8. a template engine is a tool
  9. 9. why not just render PHP templates?
  10. 10. PHP templating woes» rendering template files is a hack: an include statement with output-buffering control» no or faked template inheritance» no isolation: PHP templates suck in any global variables or functions available
  11. 11. we need the brevity of templateswith the isolation of object-oriented programming
  12. 12. so give me some Twiggy pudding Twig is: Twig offers: » fast » true inheritance » flexible » real output escaping » concise » tons of filters » secure » custom tags » fully-featured » great documentation » Extensible » global variables » designer-friendly » the “for-else” control http://www.twig-project.org
  13. 13. Twig is concise and each templatecompiles to an actual PHP object
  14. 14. seeing is believing
  15. 15. a moment oftemplating zen
  16. 16. “The template system is meant toexpress presentation, not program logic.” - Django documentation
  17. 17. Twig can easily be used anywhere
  18. 18. act 2 Twigs simple life
  19. 19. Twigs three tagsTwig parses just three simple tags: » comment tag » print tag » block tag
  20. 20. a. do nothing (comment tags){# comment #} » totally ignored when rendered
  21. 21. b. say something (print tags){{ print me! }} » prints the given expression » think “<?php echo” » If youre ultimately printing something, use this tag
  22. 22. c. do something (block tags){% set foo = inside a block tag %} » used mostly for control-flow statements like if, for, include and block » can have beginning and end tags » if youre *doing* something and not *printing* something, use this tag
  23. 23. Twigs three tags » do nothing: {# comment tag #} » say something: {{ print tag }} » do something: {% block tag %} its just that simple
  24. 24. act 3 Everything is an expression
  25. 25. expressions: Twig guts » like PHP, most everything inside a tag is an expression » expressions are the most interesting and flexible part of Twig
  26. 26. Expressions Block names Block-specific tokens
  27. 27. an expression can consist of many different things
  28. 28. strings, variables, arrays, functions, filters, tests, subscripts...
  29. 29. strings, numbers and variables » like any language, strings, numbers and variables are commonplace
  30. 30. arrays and hashes » arrays use [], hashes use {}
  31. 31. operators » twig has operators just like PHP, but extensible and with some extras
  32. 32. filters » a filter always follows a pipe (|) and modifies the value that precedes it » a filter may or may not take arguments
  33. 33. functions » just like PHP, returns a value based on some input
  34. 34. twig expresses himself » strings, numbers and variables » arrays and hashes » operators » filters » functions hey – its simple like PHP, but flexible...
  35. 35. act 4 twig on the battlefield
  36. 36. the test... » a template that displays a list of “widgets” in odd-even rows » render tags and other info about each widget » create basic, clean pagination
  37. 37. block tagprint tag
  38. 38. Lets clean things up
  39. 39. filter to title-case the widget namefilters to strip tagsand shorten thewidgets description
  40. 40. your presenter is lying to you... » the “truncate” filter isnt part of Twig, but is available via a repository of extensions » Everything in Twig is loaded via an Extension (even the core stuff) » Extensions are easy to use and create – well prove it later * https://github.com/fabpot/Twig-extensions
  41. 41. odd/even classes like a boss
  42. 42. Twig function cycles throughthe given array items Special variable available inside all “for” loops. The “loop” variable knows other tricks like “loop.last” and “loop.revindex”
  43. 43. flex some filters
  44. 44. apply the date filterchain filters to turn a list of tagsinto a comma-separated list
  45. 45. convenience, readability
  46. 46. even managementknows what this does
  47. 47. pagination?
  48. 48. function returns a positive radius of numbers around the center (e.g. 3, 4, 5, 6, 7)the awesome loop variable tells uswhen were in the last iteration
  49. 49. the audacity: your speaker just lied again » but.... the “radius” function doesnt actually exist in Twig. but since its pretty handy, lets create it!
  50. 50. act 5 Twig extensions
  51. 51. Twig extensions everything in Twig is loaded by an “Extension” class: » filters » functions » operators » tests (e.g. divisbleby) » custom tags Extensions are EASY!
  52. 52. step 1: create a class that extends Twig_Extension
  53. 53. step 2: tell Twig about the extension
  54. 54. step 2: tell Twig about the extension (Symfony2)* dont forget to import this file from your applications configuration (i.e. app/config/config.yml)
  55. 55. step 3: add some guts to the extension class
  56. 56. step 4: Celebrate!!!* buy a round of drinks* watch the sun set* kiss that cute girl at the coffee shop
  57. 57. I want more! ok great – do some reading! » http://www.twig-project.org/doc/advanced.html » http://www.twig-project.org/doc/extensions.html seriously – the Twig docs are quite excellent
  58. 58. act 6 after-dinner mint mmm
  59. 59. screw with the Twig syntax » because Twig is totally sandboxed (i.e. you control exactly what can and cannot be done inside a template, Twig is a perfect fit for a CMS. » and if Twigs syntax scares your clients... change it!
  60. 60. cool, what about debugging?a debug tag ships with the twig-extensions
  61. 61. the “debug” extension is available for youin Symfony2 - just enable it
  62. 62. prints every variable availableprints the foo variable
  63. 63. but weve only justscratched the surface
  64. 64. theres much much more » inheritance name can be: * an item on an array * property on an object » macros (reusable code bits) * getName() » subscripts or you can force it to *just* fetch “name” as an array item
  65. 65. Twig, hes a people-person » Twigs loves contributions, so *get involved*! » https://github.com/fabpot/twig » https://github.com/fabpot/twig-extensions » http://groups.google.com/group/twig-users
  66. 66. thank you Ryan Weaver iostudio @weaverryan www.thatsquality.com ryan [at] thatsquality.com reach out to me – id love to hear from you!comments, feedback, questions http://joind.in/talk/view/2601
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×