我建立一個樹枝延伸來實現這一點。目標是給數組和屬性一個樹枝擴展並計算結果。
首先,註冊服務:
affiliate_dashboard.twig.propertysum:
class: AffiliateDashboardBundle\Service\PropertySum
public: false
tags:
- { name: twig.extension }
然後實現TwigExtension:
命名空間AffiliateDashboardBundle \服務;
class PropertySum extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('propertySum', array($this, 'propertySum')),
);
}
public function propertySum($collection, $property)
{
$sum = 0;
$method = 'get' . ucfirst($property);
foreach ($collection as $item) {
if (method_exists($item, $method)) {
$sum += call_user_func(array($item, $method));
}
}
return $sum;
}
public function getName()
{
return 'property_sum';
}
}
之後,您可以輕鬆地計算特定集合的屬性之和。還與教條關係合作。用法示例:
{{ blogpost.affiliateTag.sales|propertySum('revenue') }}
完成!
你爲什麼不在控制器中進行計算? Twig實際上只是假設用於顯示計算的數據。在MVC中,你的觀點並不是真的假設正在運行計算。 – Chausser