2

我在树枝上有过滤器:

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')

并且可以从另一个过滤器中调用它。

谢谢和对不起我的英语

4

3 回答 3

6

如果您希望其他过滤器的返回值进入您的价格过滤器,您可以将它们链接在 twig 中:

{{ 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;
}
于 2013-08-29T21:04:53.427 回答
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;
                }
            )
        ];
    }
}
于 2016-08-18T20:31:16.610 回答
0

您将回调函数用作“静态”。

您可以将函数定义为静态,或替换为 \Twig_Filter_Method($this, 'priceFilter')

于 2013-08-29T18:04:38.857 回答