Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to retrieve all Variables from a Twig Template?

Is it possible to retrieve all variables inside a Twig template with PHP?

Example someTemplate.twig.php:

Hello {{ name }},  your new email is {{ email }} 

Now I want to do something like this:

$template = $twig->loadTemplate('someTemplate'); $variables = $template->getVariables(); 

$variables should now contain "name" and "email".

The reason I want to do this is that I am working on a CMS system where my twig templates and variables are dynamically set by my users and they also fill the variables through an API.

I want to set default values to not-set variables and therefore I need a list of all variables that exist inside the template…

like image 557
Stefan Neubig Avatar asked Oct 09 '12 11:10

Stefan Neubig


People also ask

How do you access variables in Twig?

In Twig templates variables can be accessed using double curly braces notation {{ variableName }} .

How do I print a Twig value?

Printing variables using Kint in Twig To print a variables, just add {{ kint() }} into the template and pass a variable in, for example, {{ kint(page) }}.

What is macro in Twig file?

From the official Twig documentation: "Macros are comparable with functions in regular programming languages. They are useful to put often used HTML idioms into reusable elements to not repeat yourself."


2 Answers

This is useful I find to get all the top-level keys available in the current context:

<ol>     {% for key, value in _context  %}       <li>{{ key }}</li>     {% endfor %} </ol> 

Thanks to https://www.drupal.org/node/1906780

like image 118
duncan Avatar answered Sep 23 '22 23:09

duncan


UPDATE 2019

Although {{ dump() }} does work, in some circumstances it may result in a "memory exhausted" error from PHP if it generates too much information (for example, due to recursion). In this case, try {{ dump(_context|keys) }} to get a list of the defined variables by name without dumping their contents.

UPDATE 2017

It is possible by using {{ dump() }} filter. Thanks for pointing that out in the comments!


OUTDATED

It is not possible.

You can look for these variable in twig templates and add |default('your_value') filter to them. It will check if variable is defined and is not empty, and if no - will replace it with your value.

like image 23
Vitalii Zurian Avatar answered Sep 23 '22 23:09

Vitalii Zurian