3

Twig テンプレートに渡されるすべてのパラメーターを、それらが何と呼ばれるかを事前に知らなくてもループする方法を知っている人はいますか? {{ dump() }}関数 ( を呼び出す) は次のvar_dump()ようなものを出力します。

array(5) {
  ["foo"]=>
  bool(true)
  ["bar"]=>
  string(3) "Yes"
  ["baz"]=>
  int(99)
  ["subdata1"]=>
  array(1) {
    ["foo2"]=>
    bool(false)
  }
  ["subdata2"]=>
  array(1) {
    ["foo3"]=>
    int(5)
  }
}

subdata1またはではないすべてのパラメーターをループしてsubdata2、次のような出力ができるようにします。

foo is true
bar is Yes
baz is 99

テンプレートに送信されたデータ構造を保持することが重要であるため、パイプの Twig 側で解決策を探しています。

過去 2 日間、私はまばらな Twig ドキュメントを調べて、これを行う方法を明らかにする隠された宝石を見つけようとしましたが、何も見つかりませんでした。

4

3 に答える 3

2

これには独自の関数を作成する必要があります。

function get_other_context_vars($context)
{
    $vars = array();
    foreach ($context as $key => $value) {
        if (!$value instanceof Twig_Template && !in_array($key, array('subdata1', 'subdata2')) {
            $vars[$key] = $value;
        }
    }

    return $vars;
}

$environment->addFunction(new Twig_SimpleFunction('get_other_context_vars', 'get_other_context_vars', array('needs_context' => true)));

使用法:

{% for name, var in get_other_context_vars() -%}
    {{ name }} is {{ var }}
{%- endfor %}
于 2013-07-12T10:11:55.450 に答える
1

ヘルパーの仕組みdump()を調べてから、カスタム拡張機能で同様の動作を再現します。

于 2013-07-12T10:11:43.017 に答える
0

値が配列かどうかをテストできます

{% for value in values %}
    {% if value[0] is not defined %}
        {{ value }}
    {% endif %}
{% endfor %}

このソリューションは、サブデータのキーを知ることができる場合に機能します。もう 1 つの解決策は、 is_array 関数を使用してコントローラーに別の配列を作成し、フィルター処理することです。

于 2013-07-12T10:09:16.827 に答える