рекурсивная функция ветки в Twig_SimpleFunction - PullRequest
0 голосов
/ 02 мая 2018

Мне нужно знать, как вызвать функцию, определенную в $ twig-> addFunction (новая функция Twig_SimpleFunction из той же функции или рекурсивно. Большое спасибо! Pablo

1 Ответ

0 голосов
/ 03 мая 2018

Это может быть достигнуто путем передачи экземпляра twig в сторону вызываемого объекта внутри Twig_SimleFunction

$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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...