これを達成するために、私はtwig拡張機能を構築します。ターゲットは、配列とプロパティをtwig拡張に与え、結果を計算することです。
まず、サービスを登録:
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では、あなたのビューarent本当に計算を実行すると仮定します。 – Chausser