I'm trying to access one of my twig variables in a macro. I know I can't do this directly.
as with PHP functions, macros don't have access to the current template variables
but the same page state:
You can pass the whole context as an argument by using the special _context variable.
What's the syntax for passing _context to the macro, and for accessing it within the macro?
thanks
Consider the following example:
1) Create a variable in the current context
{% set x = 42 %}
2) Declare a macro that takes an object as parameter
{% macro test(variables) %}
variable x = {{ variables.x | default('undefined') }}
{% endmacro %}
3) Call your macro, with the special _context
object
{{ _self.test(_context) }}
This will display:
variable x = 42
You could also use the varargs property of the macro (handy if you don't want to stipulate a parameter in the macro):
I assume you have a few twig vars stipulated in your template.
{%set bodyType = "skinny" %}
With any twig macro you pass in the _context as the final argument.
{{ _self.MyAmazaingMacroThatDoesEverything("french fries",_context)
in the macro:
{% macro MyAmazaingMacroThatDoesEverything(healthyFood) %}
variable yourTwigPageVar = {{ varargs[0].bodyType | default('undefined') }}
<h1>I like {{healthyFood}}, eating them that makes me {{yourTwigPageVar}}</h2>
{% endmacro %}