How do I access the _context variable within a macro in TWIG?

主宰稳场 提交于 2020-01-23 05:31:08

问题


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


回答1:


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




回答2:


You could also use the varargs property of the macro (handy if you don't want to stipulate a parameter in the macro):

  1. I assume you have a few twig vars stipulated in your template.

       {%set bodyType = "skinny" %}
    
  2. With any twig macro you pass in the _context as the final argument.

      {{ _self.MyAmazaingMacroThatDoesEverything("french fries",_context)
    
  3. 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 %}
    


来源:https://stackoverflow.com/questions/20367170/how-do-i-access-the-context-variable-within-a-macro-in-twig

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!