php 如何在twig中访问动态变量名?

nvbavucw  于 2022-12-21  发布在  PHP
关注(0)|答案(5)|浏览(158)

我在twig中有一些变量

placeholder1
placeholder2
placeholderx

为了调用它们,我循环遍历对象数组“invoices”

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

vktxenjb1#

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

fslejnso

fslejnso2#

除了使用attribute function,您还可以使用常规括号表示法访问_context数组的值:

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

我个人会使用这一个,因为它更简洁,在我看来更清晰。
如果环境选项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_variables默认为false,但我更喜欢将其设置为true,以避免例如打字错误导致的意外问题。

7gyucuyw

7gyucuyw4#

我对这个问题的解决方案:
创建占位符(x)的数组。例如:

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

# Send to View ID invoice
$id_placeholder = 2;

在模板调用中同时发送用于查看和的变量:

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

这是B。
希望这对你有帮助。

unhi4e5o

unhi4e5o5#

我找到了解决办法:

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

相关问题