being dangerous with twig

Post on 11-May-2015

20.849 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

being dangerous with Twiga short story by Ryan Weaver

February 9, 2011

Symfony Live 2011

A 5-step guide to using Twig – the fast, secure andextensible PHP templating engine – to create clean

template code, leverage powerful filters, make your designerswrite you love letters, write template functions that don't clog up your

global PHP namespace, take advantage of true template inheritance, hang out with Django programmers and be able to talk template syntax, enjoy true and non-invasive output 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 asimple {{, 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 he's misunderstoodhow 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 WeaverSymfony Live 2011

being dangerous with Twig

@weaverryan

» symfony

» documentation

» collaboration

» the lovely @leannapelham

● Advertising & Integrated Marketing Solutions

• coming to you from» Nashville, TN» Washington, D.C.

• 150 employees

• and we're hiring!

iostudio: flying the symfony flag

Why Twig?

act 1

because template engines are awesome

Template engines

A template engine allows you to render apresentation (HTML, XML, etc) via a templatein a controlled environment

It should allow special functionality thatmakes creating templates easier (helpers,template inheritance, etc)

a template engineis a tool

why not just renderPHP templates?

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

we need the brevity of templates

with the isolation of object-oriented programming

so give me some Twiggy pudding

Twig is:» fast» flexible» concise» secure» fully-featured» Extensible» designer-friendly

http://www.twig-project.org

Twig offers:» true inheritance» real output escaping» tons of filters» custom tags» great documentation» global variables» the “for-else” control

Twig is concise

and each template compiles to an actual

PHP object

seeing is believing

a moment oftemplating zen

“The template system is meant to express presentation, not program

logic.”

- Django documentation

Twig can easily be used anywhere

act 2

Twig's simple life

Twig's three tags

Twig 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 you're ultimately printing something, use this tag

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 you're *doing* something and not *printing* something, use this tag

Twig's three tags

» do nothing: {# comment tag #}

» say something: {{ print tag }}

» do something: {% block tag %}

it's just that simple

act 3

Everything is anexpression

expressions: Twig guts

» like PHP, most everything inside a tag is an expression

» expressions are the most interesting and flexible part of Twig

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 take arguments

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 – it's simple like PHP, but flexible...

act 4

twig on the battlefield

the test...

» a template that displays a list of “widgets” inodd-even rows

» render tags and other info about each widget

» create basic, clean pagination

block tag

print tag

Let's clean things up

filter to title-casethe widget name

filters to strip tagsand shorten thewidget's description

your presenter is lying to you...

» the “truncate” filter isn't part of Twig, butis 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 – we'llprove it later

* https://github.com/fabpot/Twig-extensions

odd/even classeslike a boss

Twig function cycles throughthe given array items

Special variable available insideall “for” loops.

The “loop” variable knows othertricks like “loop.last” and“loop.revindex”

flex some filters

apply the date filter

chain filters to turn a list of tagsinto a comma-separated list

convenience,readability

even managementknows what this does

pagination?

function returns a positiveradius of numbers around thecenter (e.g. 3, 4, 5, 6, 7)

the awesome loop variable tells uswhen we're in the last iteration

the audacity: your speaker just lied again

» but.... the “radius” function doesn't actuallyexist in Twig.

but since it's pretty handy, let's create it!

act 5

Twig extensions

Twig extensions

everything in Twig is loaded by an “Extension” class:

» filters

» functions

» operators

» tests (e.g. divisbleby)

» custom tags

Extensions are EASY!

step 1: create a class that extends Twig_Extension

step 2: tell Twig about the extension

step 2: tell Twig about the extension (Symfony2)

* don't forget to import this file from your application's configuration (i.e. app/config/config.yml)

step 3: add some guts to the extension class

* buy a round of drinks

* watch the sun set

* kiss that cute girl at the coffee shop

step 4: Celebrate!!!

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

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

inside a template, Twig is a perfect fit for a CMS.

» and if Twig's syntax scares your clients... change it!

cool, what aboutdebugging?

a debug tag ships withthe twig-extensions

the “debug” extension is available for youin Symfony2 - just enable it

prints every variableavailable

prints the foo variable

but we've only justscratched the surface

there's much much more

» inheritance

» macros (reusable code bits)

» subscripts

name can be: * an item on an array * property on an object * getName()

or you can force it to*just* fetch “name”as an array item

Twig, he's a people-person

» Twig's loves contributions, so *get involved*!

» https://github.com/fabpot/twig

» https://github.com/fabpot/twig-extensions

» http://groups.google.com/group/twig-users

Ryan Weaveriostudio@weaverryanwww.thatsquality.comryan [at] thatsquality.com

thank you

reach out to me – i'd love to hear from you!

http://joind.in/talk/view/2601

comments, feedback, questions

top related