phalcon: вольт получить значение из массива, ключ которого взят из переменной
В phalcon templating engine 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 %}
Очевидно, что это приведет к ошибке, потому что в продукте нет "col".
Есть ли решение или альтернатива для этого?
3 ответа
В то время как я ломал голову над расширением вольт, я нашел более простое решение:
Преобразуйте объект модели в массив. В контроллере:
$products->toArray()
Просто, в представлении, чтобы отобразить конкретное значение конкретного ключа из массива:
{{ product[key] }}
Проблема решена, хотя, поскольку она теперь не в форме объекта, я не могу получить доступ к свойству объекта с помощью точки, как {{ product.some_field }}
вместо {{ product['some_field'] }}
,
Вы должны использовать функцию readAttribute(): http://forum.phalconphp.com/discussion/1231/volt-access-to-object-property-using-variable
{{ product.readAttribute(col) }}
Другое решение:
В 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)