4

phalcon テンプレート エンジン volt (twig に似ています) では、次の方法ですべてのレコードを取得できます。

{% for product in products %}
    Name: {{ product.name }}
    Description: {{ product.description }}
    price: {{ product.price}}
{% endfor  %}

したがって、私のシナリオでは、さまざまな種類のモデルに使用される crud テンプレートを作成しています。このテンプレートで達成したかったことは、このビューのすべての列がハードコーディングされていないことです。したがって、表示したい列を配列に保存します(コントローラーで定義され、ビューに渡されます):

$cols = ['name','description','price']

ビューで、すべての列を表示するには:

{% for product in products %}
   {% for col in cols %}
       {{ col }}: {{ product.col }}
   {% endfor  %}
{% endfor  %}

明らかに、これはエラーになります。なぜなら、product には「col」がないからです。

これに対する解決策または代替手段はありますか?

4

3 に答える 3

2

readAttribute() 関数を使用する必要があります: http://forum.phalconphp.com/discussion/1231/volt-access-to-object-property-using-variable

{{ product.readAttribute(col) }}
于 2014-10-27T07:50:06.730 に答える
2

ボルト拡張機能をいじくり回してイライラしながら、私はより簡単な解決策を見つけました:

  1. モデル オブジェクトを配列に変換します。コントローラーで:$products->toArray()

  2. ビューで、配列から特定のキーの特定の値を表示するには、次のようにします。{{ product[key] }}

問題は解決しましたが、現在はオブジェクトの形式ではないため{{ product.some_field }}、代わりにドット like を使用してオブジェクト プロパティにアクセスできません{{ product['some_field'] }}

于 2014-03-27T14:53:42.783 に答える
0

別の解決策:

app/config/service.php

$di->set('volt', function($view, $di) {
    $volt = new VoltEngine($view, $di);
    $volt->setOptions(array(
        'compiledPath' => APP_PATH . 'cache/volt/'
    ));
    $compiler = $volt->getCompiler();
    // Add this filter
    $compiler->addFilter('getAttribute', function ($resolvedArgs, $exprArgs) {
        return vsprintf('%s->{%s}', explode(', ', $resolvedArgs));
    });

    return $volt;
}, true);

そして今、ボルトで次のように属性を取得できます。

product|getAttribute(key)
于 2015-05-10T15:59:47.170 に答える