5

私がオブジェクトを持っていて、次のような小枝テンプレートで呼び出すことができるイメージング:

{{ object1.object2.object3.property3A }}

ええと、phpを使って書くと内容が表示されます:

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

私の質問は、私が文字列を持っているかどうかです、

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

そしてそれは小枝に渡されます、どうすればproperty3Aを取得できますか?私の経験では、次のようにphpでこれを行うことができます。

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

しかし、私はそれを小枝で機能させる方法を知りません。

4

3 に答える 3

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 %}
于 2013-03-08T11:06:22.220 に答える
0

小枝でこれを行うための「ショートカット」はないと思います。これを行う簡単な方法が見つからない場合は、STRING_TYPEをVAR_TYPEに変換する独自の拡張機能を作成できます。

小枝の内部はあなたを正しい軌道に乗せるかもしれません。これは、小枝の延長で実現可能であり、あなたに刺激を与える可能性があるものの例です。

于 2013-03-07T16:42:08.940 に答える
0

私も同じような状況に遭遇しました。この回答は、必要なオブジェクトがテンプレートで使用可能であり、その名前が文字列でわかっている場合にのみ機能します。

この場合、Twigのグローバル変数を使用してオブジェクトにアクセスできます_context

{% set object1 = _context['object1'] %}

次に、通常どおりオブジェクトのメソッドと変数にアクセスします。

{{ object1.object2.object3.property3A }}
于 2015-06-28T14:00:31.150 に答える