twig_SimpleFunction中的twig递归函数

时间:2018-05-02 17:03:20

标签: php twig

我需要知道如何调用$ twig->中定义的函数; addFunction(来自同一函数的新Twig_SimpleFunction或递归。 非常感谢你! 巴勃罗

1 个答案:

答案 0 :(得分:0)

这可以通过将twig实例传递给Twig_SimleFunction

内的callable来实现
$twig->addFunction(new \Twig_SimpleFunction('fibonacci', function($n) use($twig) {
    if ($n == 0) return 0;
    if ($n == 1) return 1;

    $fn = $twig->getFunction('fibonacci')->getCallable();
    return $fn($n -1) + $fn($n - 2);
}));

如果您使用扩展类,而不是在没有扩展类的情况下尝试进行递归,那会简单得多。

使用扩展类,你可以像这样做

class Project_Twig_Extension extends Twig_Extension {
    public function getFunctions() {
        return array(
            new Twig_Function('fibonacci', array($this, 'fibonacci')),
        );
    }

    private function fibonacci($n) {
        if ($n == 0) return 0;
        if ($n == 1) return 1;
        return $this->fibonacci($n -1) + $this->fibonacci($n - 2);      
    }
}

note 要注册twig的扩展程序,请执行以下操作:

$twig->addExtension(new Project_Twig_Extension());