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…
After using duncan's answer for quite some time I finally found the "right" way to dump all twig variables of a template:
That's it. All the variables available in the template will be dumped and in the dump section of the profiler, not in the middle of your html like with
{{ dump() }}
.if you put the contents of
dump()
into a variable:you 'll get all the variables but in "dump ready" html so it would be a pain to parse it.
Hope that helps.
If you need all Twig elements inside of a text, just use:
I had a issue where the WSIWYG editor placed HTML tags inside of Twig variables. I filter them with:
UPDATE
Use this expression to find all {{ }} and {% %}
have fun :-)
Here is the best way and easiest way to dump all variables :
Source : https://www.drupal.org/docs/8/theming/twig/discovering-and-inspecting-variables-in-twig-templates
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.This is useful I find to get all the top-level keys available in the current context:
Thanks to https://www.drupal.org/node/1906780