属性名称,根据Twig中的表达式创建

时间:2012-02-24 07:27:49

标签: php twig

在php模板中,我有一个对象$obj,它有一些属性,如$obj->attr_1, $obj->attr_2等。 如何在for循环中从Twig模板中调用它们?

我试过这样:

{% for i in 1..3 %}
  {% set new_attr = 'attr_' ~ i %}
  {{obj.new_attr}}
{% endfor %}

或者像这样

{% for i in 1..3 %}
  {% set new_attr = 'attr_' ~ i %}
  {{obj[new_attr]}}
{% endfor %}

但它不起作用。

2 个答案:

答案 0 :(得分:1)

尝试使用attribute功能。

答案 1 :(得分:0)

两种方法都不起作用。在第一个中,new_attr是一个字符串值,所以我相信 obj.new_attr将尝试字符串连接。第二种方法不起作用,因为它将obj视为一个数组,这与对象不同。

您所要求的是反思 - 向对象询问有关其自身的信息的能力,例如其方法。 PHP对反射有基本的支持,如http://www.php.net/manual/en/book.reflection.php所述(请参阅getMethods条目),但需要安装扩展。

作为替代方案,为什么不在你的对象上使用一个名为get的方法,它接受一个数字,然后调用适当的方法,例如

public function get($attr)
{
   if ($attr == 1) return $this->attr_1();
   // etc...
}