twig将字符串转换为它所代表的对象

时间:2013-03-07 15:29:27

标签: symfony twig

成像,我有一个对象,可以在这样的树枝模板中调用:

{{ object1.object2.object3.property3A }}

好吧,如果我们使用php编写它会显示内容:

$object1->getObject2()->getObject3()->getProperty3A();

我的问题是,如果我有一个字符串,

$refString="object1.object2.object3.property3A";

然后它被传递到树枝,我怎么能得到property3A?根据我的经验,我们可以在php中这样做:

$refString="object1->getObject2()->getObject3()->getProperty3A()";
echo $$refString;

但我不知道如何让它在树枝上工作。

3 个答案:

答案 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 }}