我在树枝上过滤了:
class AcmeExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
);
}
public function priceFilter($number, $decimals = 0, $decPoint = '.', $thousandsSep = ',')
{
$price = number_format($number, $decimals, $decPoint, $thousandsSep);
$price = '$'.$price;
return $price;
}
}
但如何在其他过滤器内调用价格过滤器?在symfony 2.0中使用'price' => new \Twig_Filter_Method($this, 'priceFilter')
并且可以在另一个过滤器中调用它。
感谢和抱歉我的英语
答案 0 :(得分:5)
如果您希望将其他过滤器的返回值放入价格过滤器中,则可以将它们链接在树枝中:
{{ value|acme_filter|price }}
或者在另一个方向,如果您需要其他过滤器中的价格过滤器的返回值:
{{ value|price|acme_filter }}
如果您真的需要其他过滤器内的价格过滤器,没问题。扩展是一个简单的php类。
public function acmeFilter($whatever)
{
// do something with $whatever
$priceExtentsion = new PriceExtenstion();
$whatever = $priceExtension->priceFilter($whatever);
// do something with $whatever
return $whatever;
}
答案 1 :(得分:3)
class SomeExtension extends \Twig_Extension {
function getName() {
return 'some_extension';
}
function getFilters() {
return [
new \Twig_SimpleFilter(
'filterOne',
function(\Twig_Environment $env, $input) {
$output = dosmth($input);
$filter2Func = $env->getFilter('filterTwo')->getCallable();
$output = call_user_func($filter2Func, $output);
return $output;
},
['needs_environment' => true]
),
new \Twig_SimpleFilter(
'filterTwo',
function ($input) {
$output = dosmth($input);
return $output;
}
)
];
}
}
答案 2 :(得分:0)
您将回调函数用作“静态”。
您可以将函数定义为静态,或替换为\ Twig_Filter_Method($ this,'priceFilter')