4

在 phalcon 模板引擎伏特(类似于 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  %}

显然,这会导致错误,因为产品中没有“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] }}

问题解决了,虽然因为它现在不是对象的形式,我不能使用 dot like 访问对象属性{{ product.some_field }},而不是{{ 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 回答