SlideShare a Scribd company logo
1 of 97
Download to read offline
Being dangerous
with Twig
A 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 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 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 he's 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.
Being dangerous with Twig
KnpUniversity.com

github.com/weaverryan
• Lead for the Symfony documentation

!
• KnpLabs US - Symfony consulting, training, 

Kumbaya

!
• Writer for KnpUniversity.com

screencasts
Buenos Dias!
Birthday
Wishes!
Happy Birthday Dad!
Happy Birthday
Anne-Sophie!
Happy Birthday
Rafael Nadal
Happy Birthday
Anderson Cooper
Why Twig?
Act 1
@weaverryan
because template
engines are awesome
@weaverryan
$engine = new RyansFantasyTemplatingEngine();

$tpl = $engine->loadTemplate('drupalcon.php');

$tpl->render([‘place' => ‘Austin!’]);
<!-- drupalcon.php -->



<h1><?php echo $place ?></h1>



<?php echo call_some_great_helper('woot!') ?>

Template Engines
• A template engine allows you to render a
presentation (HTML, XML, etc) via a
template in a controlled environment

!
• It should allow special functionality that
makes creating templates easier (helpers,
template inheritance, etc)
@weaverryan
@weaverryan
a template engine
is a tool
@weaverryan
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 template inheritance

!
• no isolation: PHP templates suck in any
global variables or functions available
@weaverryan
@weaverryan
we want the brevity
of templates
!
with the isolation of
object-oriented
programming
@weaverryan
so give me some Twiggy pudding
Twig is:

» fast

» flexible

» concise

» secure

» fully-featured

» Extensible

» designer-friendly
Twig offers:

» true inheritance

» real output escaping

» tons of filters

» custom tags

» great documentation

» global variables

» the “for-else” control
@weaverryan
Twig is concise
!
and each template
compiles to an actual
PHP object
@weaverryan
Seeing is believing
https://www.flickr.com/photos/visitfinland/5203910918
@weaverryan
because template
engines are awesome
@weaverryan
because template
engines are awesome
@weaverryan
because template
engines are awesome
class __TwigTemplate_617db133b9dd01ce28b55447b extends Twig_Template

{

// line 3

public function block_body($context, array $blocks = array())

{

// line 4

echo " ";

foreach ($context['_seq'] as $context["_key"] =>
$context["blog"]) {

// line 5

echo " <h2>";

echo $this->getAttribute($context["blog"]);

echo "</h2>
@weaverryan https://www.flickr.com/photos/melolou/517629486
a moment of
templating zen
@weaverryan
“The template system is meant
to express presentation, not
program logic.”
- Django Documentation
@weaverryan
Twig can easily be
used anywhere
@weaverryan
require __DIR__.'/vendor/autoload.php';



$loader = new Twig_Loader_Filesystem(array(__DIR__.'/templates'));

$twig = new Twig_Environment($loader);



echo $twig->render('hello.twig', array(

'name' => 'DrupalCon!'

));

{# templates/hello.twig #}


{% extends 'layout.twig' %}



{% block body %}

Hello {{ name }}!

{% endblock %}

Act 2
Twig’s Simple Life
@weaverryan
Twig's three tags
Twig parses just three tags:

!
» comment tag

!
» print tag

!
» block tag
a. do nothing (comment tags)
{# comment #}

» totally ignored when rendered
@weaverryan
b. say something (print tags)
{{ 'print me!' }}

» simply prints the given expression

» equivalent to <?php echo

» If you're ultimately printing something,
use this tag
@weaverryan
@weaverryan
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
@weaverryan
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 an expression
@weaverryan
expressions Twig guts
» like PHP, most everything inside a tag 

is an expression

!
!
!
!
!
» expressions are the most interesting and 

flexible part of Twig
@weaverryan
Expressions Block names Block-specific tokens
@weaverryan
An expression can
consist of many
different things
https://www.flickr.com/photos/swambo/7617988518
@weaverryan
strings, numbers and variables
» like any language, strings, numbers and
variables are commonplace
@weaverryan
arrays and hashes
» arrays use [], hashes use {}
@weaverryan
operators
» just like PHP operators, but extensible
@weaverryan
filters
» filters modify the value that precedes it and 

are always preceded by a pipe (|)

» filters may or may not take arguments
@weaverryan
functions
» returns a value based on an arbitrary
input
@weaverryan
» strings, numbers and variables
» arrays and hashes
» operators
» filters
» functions
allow Twig to express Twig’s-self
Hey! It’s simple like PHP, but flexible
Act 4
Twig on the battlefield
@weaverryan
» a template that displays a list of “widgets”
in odd-even rows

» render info about each widget

» create basic, clean pagination
the test…
@weaverryan
@weaverryan
http://1.bp.blogspot.com/_D_Z-D2tzi14/TBpOnhVqyAI/AAAAAAAADFU/8tfM4E_Z4pU/s1600/responsibility12(alternate).png
@weaverryan
@weaverryan
» the “truncate” filter isn't part of Twig, but is
available via a library of extensions

» Everything in Twig is loaded via an Extension
(even the core stuff)

» Extensions are easy to use and create – we’ll
prove it later

!
» https://github.com/fabpot/Twig-extensions
your presenter is lying to you…
@weaverryan
http://1.bp.blogspot.com/_D_Z-D2tzi14/TBpOnhVqyAI/AAAAAAAADFU/8tfM4E_Z4pU/s1600/responsibility12(alternate).png
@weaverryan
@weaverryan https://www.flickr.com/photos/circasassy/7192588208
Flex some filters
@weaverryan
@weaverryan
convenience,
readability
@weaverryan
@weaverryan
pagination?
@weaverryan
@weaverryan
» but.... the “radius” function doesn't
actually exist in Twig.
the audacity: your speaker just lied again
But since it's pretty handy, let's create it!
Act 5
Twig extensions!
@weaverryan
» filters

» functions

» operators

» tests (e.g. divisibleby)

» custom tags
Twig extensions
everything in Twig is loaded by an “Extension”
class:
Extensions are easy!
@weaverryan
@weaverryan
Yes, there is a missing
piece of “hooking this up”
@weaverryan
It’s a small amount of
code, involving services
@weaverryan
Come to my talk
tomorrow ;)
!
MASTER THE NEW CORE OF
DRUPAL 8 NOW: WITH SYMFONY
AND SILEX
!
10:45 Room: G - Trellon | 4th floor
Act 6
Theming D7 versus D8
@weaverryan
Good News!
@weaverryan
The Changes are
Underwhelming!
@weaverryan
From D7 themes to D8 themes
» Other than the Twig syntax, things feel very
familiar

!
» page.tpl.php -> page.html.twig

» node.tpl.php -> node.html.twig

» THEME.info -> THEME.info.yml 

!
» THEME_field__taxonomy_term_reference()

->

field--taxonomy-term-reference.html.twig
@weaverryan
<div id="node-<?php print $node->nid; ?>" clear
<?php print render($title_prefix); ?>



<div class="content clearfix"<?php print $con
<?php

hide($content['links']);

print render($content);

?>

</div>

<?php $links = render($content['links']);

if ($links):

?>

<div class="link-wrapper">

<?php print $links; ?>

</div>

<?php endif; ?>

</div>

D7: node.tpl.php
@weaverryan
<article id="node-{{ node.id }}” role=“article"
{{ attributes|without(‘id', 'role') }}>



<header>{{ title_prefix }}</header>


<div class="content clearfix"{{ content_attri
{{ content|without('links') }}

</div>



{% if content.links %}

<footer class="link-wrapper">

{{ content.links }}

</footer>

{% endif %}



</article>

D8: node.html.twig
@weaverryan
Function overrides
@weaverryan
D7: template.php
function bartik_field__taxonomy_term_reference($
$output = '';



// Render the label, if it's not hidden.

if (!$variables['label_hidden']) {

$output .= '<h3 class="field-label">' . $var
}



// Render the items.

$output .= ($variables['element']['#label_disp
class="links inline">' : '<ul class="links">';

foreach ($variables['items'] as $delta => $ite
$output .= '<li class="taxonomy-term-referen
$variables['item_attributes'][$delta] . '>' . dr
}

$output .= '</ul>';

@weaverryan
D8: field--taxonomy-term-reference.html.twig
<div class="{{ attributes.class }} clearfix”
{{ attributes|without('class') }}>


<h3{{ label_attributes }}>{{ label }}: </h3>


<ul class="links">

{% for delta, item in items %}

<li class="taxonomy-term-reference-
{{ delta }}"{{ item_attributes[delta] }}
>{{ item }}</li>

{% endfor %}

</ul>


</div>

Act 7
after-dinner mint
Mmmmm…..
@weaverryan
Debugging
@weaverryan
/**

* settings.php

* 

* Twig debugging:

*

* When debugging is enabled:

* - The markup is surrounded by HTML comments

* - The dump() function can be used
* - Templates are automatically recompiled

*/

$settings['twig_debug'] = TRUE;
@weaverryan
… inline suggestions about
the template to override …
@weaverryan
… dump *all* variables
you have access to …
@weaverryan
<article id="node-{{ node.id }}" ...>



{{ dump() }}



{# ... #}

</article>
@weaverryan
… or just dump the names
of the variables …
@weaverryan
<article ...>



{{ dump(_context|keys) }}



</article>
@weaverryan
Inheritance
@weaverryan
{% block header %}

<header>

{{ title_prefix }}

{% if not page %}

<h2{{ title_attributes }}>

<a href="{{ node_url }}">{{ label }}</a>

</h2>

{% endif %}

{{ title_suffix }}



{% if display_submitted %}

<div class="meta submitted">

{{ user_picture }}

{{ submitted }}

</div>

{% endif %}

</header>

{% endblock %}
node.html.twig
@weaverryan
{% extends "core/themes/bartik/templates/node.html.twig" %}



{% block header %}

<h1 class="header">{{ label }}</h1>

{% endblock %}

node--article.html.twig
@weaverryan
{% extends "core/themes/bartik/templates/node.html.twig" %}



{% block header %}

<div class="article">

{{ parent() }}

</div>

{% endblock %}

node--article.html.twig
@weaverryan
dot.notation
@weaverryan
Am I working with an array?
<?php print render($page['header']); ?>
<div id="node-<?php print $node->nid; ?>">
or an object?
@weaverryan
Am I working with an array?
who cares!?
<article id="node-{{ node.id }}">
{{ page.header }}
@weaverryan
{{ page.header }}
» The dot notation is smart!

!
A. Is this an object with a public property?

B. Is this an array that has this key?

C. Is there a getHeader() function I can call?
@weaverryan
Templates in the
Database
@weaverryan
Twig.js
@weaverryan
A twig template can
*also* be rendered in
JavaScript
@weaverryan
<script src="/js/twig.js">

<script>

var template = twig({

data: 'The {{ baked_good }} is a lie.'

});



console.log(

template.render({
baked_good: ‘cupcake'
})

);

// outputs: "The cupcake is a lie."

</script>

@weaverryan
https://github.com/justjohn/twig.js/
Ryan Weaver
@weaverryan
¡Gracias!

More Related Content

What's hot

Introduction to puppet
Introduction to puppetIntroduction to puppet
Introduction to puppet
Habeeb Rahman
 

What's hot (20)

Learning Puppet Chapter 1
Learning Puppet Chapter 1Learning Puppet Chapter 1
Learning Puppet Chapter 1
 
Puppet at Pinterest
Puppet at PinterestPuppet at Pinterest
Puppet at Pinterest
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
 
Puppet at GitHub / ChatOps
Puppet at GitHub / ChatOpsPuppet at GitHub / ChatOps
Puppet at GitHub / ChatOps
 
Writing Pluggable Software
Writing Pluggable SoftwareWriting Pluggable Software
Writing Pluggable Software
 
Learning puppet chapter 2
Learning puppet chapter 2Learning puppet chapter 2
Learning puppet chapter 2
 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
 
Getting big without getting fat, in perl
Getting big without getting fat, in perlGetting big without getting fat, in perl
Getting big without getting fat, in perl
 
Maven 3.0 at Øredev
Maven 3.0 at ØredevMaven 3.0 at Øredev
Maven 3.0 at Øredev
 
Web develop in flask
Web develop in flaskWeb develop in flask
Web develop in flask
 
Learning puppet chapter 3
Learning puppet chapter 3Learning puppet chapter 3
Learning puppet chapter 3
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in details
 
Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
 
Apache Ant
Apache AntApache Ant
Apache Ant
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
 
Introduction to puppet
Introduction to puppetIntroduction to puppet
Introduction to puppet
 

Viewers also liked

Audio recording evaluration unit 4
Audio recording evaluration unit 4Audio recording evaluration unit 4
Audio recording evaluration unit 4
Sophia Gent
 
ISSA Journal Paper - JavaScript Infection Model
ISSA Journal Paper - JavaScript Infection ModelISSA Journal Paper - JavaScript Infection Model
ISSA Journal Paper - JavaScript Infection Model
Aditya K Sood
 
Ukg pedagogig 2
Ukg pedagogig 2Ukg pedagogig 2
Ukg pedagogig 2
Patta Ula
 
key to improving core competitive capacity 4 enterprise
key to improving core competitive capacity 4 enterprisekey to improving core competitive capacity 4 enterprise
key to improving core competitive capacity 4 enterprise
Trung Ngoc
 
Uuriv ja aktiivne õppeviis algklassides
Uuriv ja aktiivne õppeviis algklassidesUuriv ja aktiivne õppeviis algklassides
Uuriv ja aktiivne õppeviis algklassides
hajao
 
Mmac power point4-17-15 - copy
Mmac power point4-17-15 - copyMmac power point4-17-15 - copy
Mmac power point4-17-15 - copy
mmacusa2015
 
Nair jure123456
Nair jure123456Nair jure123456
Nair jure123456
nairjure
 
Simple present for schedules
Simple present for schedulesSimple present for schedules
Simple present for schedules
Nadia Espinosa
 

Viewers also liked (20)

Audio recording evaluration unit 4
Audio recording evaluration unit 4Audio recording evaluration unit 4
Audio recording evaluration unit 4
 
XY Lao Tablet
XY Lao TabletXY Lao Tablet
XY Lao Tablet
 
Baby & Kids Volume 3 - Vector Graphic Artworks
Baby & Kids Volume 3 - Vector Graphic ArtworksBaby & Kids Volume 3 - Vector Graphic Artworks
Baby & Kids Volume 3 - Vector Graphic Artworks
 
Rom - Ruby Object Mapper
Rom - Ruby Object MapperRom - Ruby Object Mapper
Rom - Ruby Object Mapper
 
Back to School 2011
Back to School 2011Back to School 2011
Back to School 2011
 
Capturing Science: Doing Lecture Capture Differently
Capturing Science: Doing Lecture Capture DifferentlyCapturing Science: Doing Lecture Capture Differently
Capturing Science: Doing Lecture Capture Differently
 
Rescue1.asd
Rescue1.asdRescue1.asd
Rescue1.asd
 
ISSA Journal Paper - JavaScript Infection Model
ISSA Journal Paper - JavaScript Infection ModelISSA Journal Paper - JavaScript Infection Model
ISSA Journal Paper - JavaScript Infection Model
 
Ukg pedagogig 2
Ukg pedagogig 2Ukg pedagogig 2
Ukg pedagogig 2
 
#VisitCool DMA West Best Idea presentation
#VisitCool DMA West Best Idea presentation#VisitCool DMA West Best Idea presentation
#VisitCool DMA West Best Idea presentation
 
Saim chishti books eemane abitalib2of2
Saim chishti books eemane abitalib2of2Saim chishti books eemane abitalib2of2
Saim chishti books eemane abitalib2of2
 
DGAE
DGAEDGAE
DGAE
 
key to improving core competitive capacity 4 enterprise
key to improving core competitive capacity 4 enterprisekey to improving core competitive capacity 4 enterprise
key to improving core competitive capacity 4 enterprise
 
XPath
XPathXPath
XPath
 
Uuriv ja aktiivne õppeviis algklassides
Uuriv ja aktiivne õppeviis algklassidesUuriv ja aktiivne õppeviis algklassides
Uuriv ja aktiivne õppeviis algklassides
 
Mmac power point4-17-15 - copy
Mmac power point4-17-15 - copyMmac power point4-17-15 - copy
Mmac power point4-17-15 - copy
 
Nair jure123456
Nair jure123456Nair jure123456
Nair jure123456
 
Spm 2322 w7n8
Spm 2322 w7n8Spm 2322 w7n8
Spm 2322 w7n8
 
Simple present for schedules
Simple present for schedulesSimple present for schedules
Simple present for schedules
 
Tre bieng an - TS Pham Thuy Hoa
Tre bieng an - TS Pham Thuy HoaTre bieng an - TS Pham Thuy Hoa
Tre bieng an - TS Pham Thuy Hoa
 

Similar to Twig: Friendly Curly Braces Invade Your Templates!

Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
Maurizio Pelizzone
 
Twig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHPTwig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHP
Fabien Potencier
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web components
btopro
 
EN Intro to Recursion by Slidesgo.pptx
EN Intro to Recursion by Slidesgo.pptxEN Intro to Recursion by Slidesgo.pptx
EN Intro to Recursion by Slidesgo.pptx
mrsk83179
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
tutorialsruby
 
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
tutorialsruby
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
tutorialsruby
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
tutorialsruby
 
Php tutorial from_beginner_to_master
Php tutorial from_beginner_to_masterPhp tutorial from_beginner_to_master
Php tutorial from_beginner_to_master
PrinceGuru MS
 

Similar to Twig: Friendly Curly Braces Invade Your Templates! (20)

Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
 
Twig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC DrupalTwig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC Drupal
 
Twig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHPTwig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHP
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web components
 
Twig for Drupal @ Frontendunited Amsterdam 2012
Twig for Drupal @ Frontendunited Amsterdam 2012Twig for Drupal @ Frontendunited Amsterdam 2012
Twig for Drupal @ Frontendunited Amsterdam 2012
 
Recursion with details Implementation.pptx
Recursion with details Implementation.pptxRecursion with details Implementation.pptx
Recursion with details Implementation.pptx
 
EN Intro to Recursion by Slidesgo.pptx
EN Intro to Recursion by Slidesgo.pptxEN Intro to Recursion by Slidesgo.pptx
EN Intro to Recursion by Slidesgo.pptx
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
 
Twig internals - Maksym MoskvychevTwig internals maksym moskvychev
Twig internals - Maksym MoskvychevTwig internals   maksym moskvychevTwig internals - Maksym MoskvychevTwig internals   maksym moskvychev
Twig internals - Maksym MoskvychevTwig internals maksym moskvychev
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
 
Introduce Django
Introduce DjangoIntroduce Django
Introduce Django
 
Thymeleaf Introduction
Thymeleaf IntroductionThymeleaf Introduction
Thymeleaf Introduction
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
 
TRACY: AN ADDICTIVE TOOL TO EASE DEBUGGING
TRACY: AN ADDICTIVE TOOL TO EASE DEBUGGINGTRACY: AN ADDICTIVE TOOL TO EASE DEBUGGING
TRACY: AN ADDICTIVE TOOL TO EASE DEBUGGING
 
Django Girls Tutorial
Django Girls TutorialDjango Girls Tutorial
Django Girls Tutorial
 
Php tutorial from_beginner_to_master
Php tutorial from_beginner_to_masterPhp tutorial from_beginner_to_master
Php tutorial from_beginner_to_master
 
Remote File Inclusion / Local File Inclusion [Attack and Defense Techniques]
Remote File Inclusion / Local File Inclusion [Attack and Defense Techniques]Remote File Inclusion / Local File Inclusion [Attack and Defense Techniques]
Remote File Inclusion / Local File Inclusion [Attack and Defense Techniques]
 

More from Ryan Weaver

Symfony2: Get your project started
Symfony2: Get your project startedSymfony2: Get your project started
Symfony2: Get your project started
Ryan Weaver
 
Doctrine2 In 10 Minutes
Doctrine2 In 10 MinutesDoctrine2 In 10 Minutes
Doctrine2 In 10 Minutes
Ryan Weaver
 

More from Ryan Weaver (13)

Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and moreSymfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
 
Guard Authentication: Powerful, Beautiful Security
Guard Authentication: Powerful, Beautiful SecurityGuard Authentication: Powerful, Beautiful Security
Guard Authentication: Powerful, Beautiful Security
 
Silex: Microframework y camino fácil de aprender Symfony
Silex: Microframework y camino fácil de aprender SymfonySilex: Microframework y camino fácil de aprender Symfony
Silex: Microframework y camino fácil de aprender Symfony
 
Cool like a Frontend Developer: Grunt, RequireJS, Bower and other Tools
Cool like a Frontend Developer: Grunt, RequireJS, Bower and other ToolsCool like a Frontend Developer: Grunt, RequireJS, Bower and other Tools
Cool like a Frontend Developer: Grunt, RequireJS, Bower and other Tools
 
The Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsThe Wonderful World of Symfony Components
The Wonderful World of Symfony Components
 
A PHP Christmas Miracle - 3 Frameworks, 1 app
A PHP Christmas Miracle - 3 Frameworks, 1 appA PHP Christmas Miracle - 3 Frameworks, 1 app
A PHP Christmas Miracle - 3 Frameworks, 1 app
 
Symfony2: Get your project started
Symfony2: Get your project startedSymfony2: Get your project started
Symfony2: Get your project started
 
Symony2 A Next Generation PHP Framework
Symony2 A Next Generation PHP FrameworkSymony2 A Next Generation PHP Framework
Symony2 A Next Generation PHP Framework
 
Hands-on with the Symfony2 Framework
Hands-on with the Symfony2 FrameworkHands-on with the Symfony2 Framework
Hands-on with the Symfony2 Framework
 
Doctrine2 In 10 Minutes
Doctrine2 In 10 MinutesDoctrine2 In 10 Minutes
Doctrine2 In 10 Minutes
 
Dependency Injection: Make your enemies fear you
Dependency Injection: Make your enemies fear youDependency Injection: Make your enemies fear you
Dependency Injection: Make your enemies fear you
 
The Art of Doctrine Migrations
The Art of Doctrine MigrationsThe Art of Doctrine Migrations
The Art of Doctrine Migrations
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

Twig: Friendly Curly Braces Invade Your Templates!