2012-02-24 7 views
0

PHPテンプレートでは、$obj->attr_1, $obj->attr_2などの属性を持つオブジェクト$objがあります。 forループでTwigテンプレートから呼び出す方法を教えてください。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 %} 

のような、それは動作しません。

答えて

1

attribute機能を試してみてください。

+0

として、番号を受け取り、その後、適切なメソッドを呼び出して取得と呼ばれる、オブジェクト上の単一のメソッドを持っていない理由の代替として

が、それは動作しますが、あなたに感謝します – falinsky

0

いずれの方法も機能しません。最初のnew_attrは文字列の値なので、はobj.new_attrが文字列の連結を試みると信じています。 2番目のアプローチは、objをオブジェクトとは異なる配列として扱うため動作しません。

あなたが求めているのは、反射(オブジェクトのメソッドなどのオブジェクトに関する情報をオブジェクトに要求する機能)です。 PHPには、http://www.php.net/manual/en/book.reflection.php(getMethodsエントリを参照)に記載されているように、リフレクションに対する基本的なサポートがありますが、拡張機能のインストールが必要です。このよう

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