如何访问树枝中的动态变量名?
Posted
技术标签:
【中文标题】如何访问树枝中的动态变量名?【英文标题】:How to access dynamic variable names in twig? 【发布时间】:2014-09-02 01:18:24 【问题描述】:我在树枝中有一些变量,比如
placeholder1
placeholder2
placeholderx
要调用它们,我正在遍历对象数组“发票”
% for invoices as invoice %
need to display here the placeholder followed by the invoice id number
placeholedr1
【问题讨论】:
你在哪里定义占位符 1 - x?它们是全球可访问的吗?每张发票都有自己的占位符吗? 我在控制器中定义它们并将它们传递给树枝模板。 你能告诉我你定义和传递它们的代码吗?那我应该可以帮你:) 您是否可以不设置创建一个占位符数组并像 placeholder[invoice.id]
一样调用它们,或者,在服务中生成占位符,然后使用您的发票或 invoice.id 在 TwigExtensions 中调用它?
谢谢大家,但作为一种解决方法,我在我的 Invoice 实体中创建了一个新方法,我在其中设置占位符。
【参考方案1】:
我刚刚遇到了同样的问题 - 使用第一个答案,经过一些额外的研究发现 attribute(_context, 'placeholder'~invoice.id)
应该可以工作(_context
是包含所有对象名称的全局上下文对象)
【讨论】:
看来如果你在macro
中使用_context
,它只会看到macro
范围内定义的变量,但看不到全局变量。【参考方案2】:
除了使用attribute
function,您还可以使用常规括号表示法访问_context
数组的值:
_context['placeholder' ~ id]
我个人会使用这个,因为它更简洁,在我看来更清晰。
如果environment option strict_variables
设置为true
,您还应该使用default
过滤器:
_context['placeholder' ~ id]|default
attribute(_context, 'placeholder' ~ id)|default
否则,如果变量不存在,您将收到 Twig_Error_Runtime
异常。例如,如果您有变量 foo
和 bar
,但尝试输出变量 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
以避免由例如引起的意外问题。错别字。
【讨论】:
【参考方案3】:我猜你可以使用 Twig attribute
函数。
http://twig.sensiolabs.org/doc/functions/attribute.html
【讨论】:
谢谢,我播种了,但这怎么能适用于我的例子? 这行得通吗? 属性(app, 'placeholder'~invoice.id) 不,它告诉我全局变量 placeholdersxx 不存在。【参考方案4】:我对这个问题的解决方案:
创建占位符数组(x)。喜欢:
# Options
$placeholders = array(
'placeholder1' => 'A',
'placeholder2' => 'B',
'placeholder3' => 'C',
);
# Send to View ID invoice
$id_placeholder = 2;
发送两个变量以供查看和模板调用:
placeholders["placeholder" ~ id_placeholder ]
这个打印“B”。
希望对你有所帮助。
【讨论】:
【参考方案5】:我找到了解决办法:
attribute(_context, 'placeholder'~invoice.id)
【讨论】:
以上是关于如何访问树枝中的动态变量名?的主要内容,如果未能解决你的问题,请参考以下文章