在phalcon模板引擎伏特(类似于树枝)中,您可以通过以下方式获取所有记录:
{% 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”。
这有什么解决方案或替代方案吗?
答案 0 :(得分:2)
虽然对伏特延伸的修补感到沮丧,但我找到了一个更简单的解决方案:
将模型对象转换为数组。在控制器中:$products->toArray()
只需在视图中显示数组中特定键的特定值:{{ product[key] }}
问题已解决,但由于它现在不是对象形式,我无法使用{{ product.some_field }}
之类的点来访问对象属性,而是{{ product['some_field'] }}
。
答案 1 :(得分:2)
您应该使用readAttribute()函数: http://forum.phalconphp.com/discussion/1231/volt-access-to-object-property-using-variable
{{ product.readAttribute(col) }}
答案 2 :(得分: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)