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

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 に答える