成像,我有一个对象,可以在这样的树枝模板中调用:
{{ object1.object2.object3.property3A }}
好吧,如果我们使用php编写它会显示内容:
$object1->getObject2()->getObject3()->getProperty3A();
我的问题是,如果我有一个字符串,
$refString="object1.object2.object3.property3A";
然后它被传递到树枝,我怎么能得到property3A?根据我的经验,我们可以在php中这样做:
$refString="object1->getObject2()->getObject3()->getProperty3A()";
echo $$refString;
但我不知道如何让它在树枝上工作。
答案 0 :(得分:1)
我没有测试过这个,但我认为它可以解决这个问题。
{#
recursively reading attributes from an object
! object1 must be available !
theValue is the value of property3A
#}
{% for key in "object1.object2.object3.property3A"|split('.') %}
{% if not loop.first %}{# skip the 'object1' part #}
{% set theValue = attribute(theValue|default(object1), key) %}
{% endif %}
{% endfor %}
答案 1 :(得分:0)
我不认为在树枝上有这样做的“捷径”。如果找不到简单的方法,可以编写自己的扩展名,将STRING_TYPE转换为VAR_TYPE。
Twig internals可能会让您走上正轨。 This是树枝延伸可行的一个例子,可能会激发你的灵感。
答案 2 :(得分:0)
我遇到了类似的情况。只有当您需要的对象可用于模板并且您知道带有字符串的名称时,此答案才有效。
在这种情况下,您可以使用Twig的全局变量_context
:
{% set object1 = _context['object1'] %}
然后正常访问对象的方法和变量:
{{ object1.object2.object3.property3A }}