Symfony2 - 如何在树枝中访问动态变量名称

时间:2014-07-11 12:05:53

标签: php symfony twig

我在树枝上有一些变量,比如

placeholder1
placeholder2
placeholderx

要调用它们,我循环遍历对象数组“发票”

{% for invoices as invoice %}
    need to display here the placeholder followed by the invoice id number
    {{ placeholedr1 }}

有什么想法吗?谢谢。

5 个答案:

答案 0 :(得分:24)

我遇到了同样的问题 - 并且使用了第一个答案,经过一些额外的研究后发现{{ attribute(_context, 'placeholder'~invoice.id) }}应该有效(_context是包含所有对象名称的全局上下文对象)

答案 1 :(得分:8)

您可以使用常规括号表示法访问_context数组的值,而不是使用attribute function

{{ _context['placeholder' ~ id] }}

我个人会使用这个,因为它更简洁,在我看来更清楚。

如果environment option strict_variables设置为true,您还应该使用default过滤器:

{{ _context['placeholder' ~ id]|default }}

{{ attribute(_context, 'placeholder' ~ id)|default }}

否则,如果变量不存在,您将获得Twig_Error_Runtime异常。例如,如果您有变量foobar但是尝试输出变量baz(不存在),则会使用消息Key "baz" for array with keys "foo, bar" does not exist获得该异常。

检查变量是否存在的更详细的方法是使用defined test

{% if _context['placeholder' ~ id] is defined %} ... {% endif %}

使用default过滤器,您还可以提供默认值,例如null或字符串:

{{ _context['placeholder' ~ id]|default(null) }}

{{ attribute(_context, 'placeholder' ~ id)|default('Default value') }}

如果省略默认值(即使用|default而不是|default(somevalue)),则默认值为空字符串。

默认情况下,

strict_variablesfalse,但我更愿意将其设置为true以避免由例如<android.support.v7.widget.AppCompatCheckBox android:id="@+id/cbCheck" android:layout_width="wrap_content" android:layout_height="wrap_content" app:buttonTint="@color/colorPrimary" /> 引起的意外问题错字。

答案 2 :(得分:4)

我猜你可以使用Twig attribute函数。

http://twig.sensiolabs.org/doc/functions/attribute.html

答案 3 :(得分:3)

我解决这个问题的方法:

创建占位符数组(x)。像:

# Options
$placeholders = array(
    'placeholder1' => 'A',
    'placeholder2' => 'B',
    'placeholder3' => 'C',
);

# Send to View ID invoice
$id_placeholder = 2;

发送视图和模板调用中的两个变量:

{{ placeholders["placeholder" ~ id_placeholder ] }}

此印刷品&#34; B&#34;。

我希望这对你有所帮助。

答案 4 :(得分:0)

我找到了解决方案:

attribute(_context, 'placeholder'~invoice.id)