ООП подход к пользовательским функциям twig [РЕШЕНО]

  • Автор темы Автор темы NikitOS
  • Дата начала Дата начала

NikitOS

Иномирянин
Всем привет!
Сделал свою функцию для twig:
PHP:
<?php
    require_once 'vendor/autoload.php';

    $loader = new Twig_Loader_Filesystem('templates');
    $twig = new Twig_Environment($loader);
    
    function phrase($param) {
        echo $param;
    }

    $twig->addFunction('phrase', new Twig_Function_Function('phrase'));
    

    $template = $twig->loadTemplate('index.html');
    echo $template->render(array('title' => 'Заголовок страницы'));
Да, функцией назвать это сложно, но это тест.
Так вот, как сделать эту функцию с ООП подходом? Как бы не пытался результата нет.
 
Код:
class A{
  function phrase($param) {
        echo $param;
    }
}

$a = new A;
$twig->addFunction(new Twig_SimpleFunction('phrase',[$a, 'phrase']));
 
Код:
class A{
  function phrase($param) {
        echo $param;
    }
}

$a = new A;
$twig->addFunction(new Twig_SimpleFunction('phrase',[$a, 'phrase']));

Если так, то не работает
Код:
<?php
    require_once 'vendor/autoload.php';
    
    $loader = new Twig_Loader_Filesystem('templates');
    $twig = new Twig_Environment($loader);

    class A {
        function phrase($param) {
            echo $param;
        }
    }

    $a = new A;
    $twig->addFunction('phrase', new Twig_SimpleFunction([$a, 'phrase']));

    $template = $twig->loadTemplate('index.html');
    echo $template->render(array('title' => 'Название страницы'));
 
Fatal error: Uncaught ArgumentCountError: Too few arguments to function Twig_SimpleFunction::__construct(), 1 passed in /var/www/wikiampe/data/www/test.megavolt-i.ru/tw/index2.php on line 18 and at least 2 expected in /var/www/wikiampe/data/www/test.megavolt-i.ru/tw/vendor/twig/twig/lib/Twig/SimpleFunction.php:26 Stack trace: #0 /var/www/wikiampe/data/www/test.megavolt-i.ru/tw/index2.php(18): Twig_SimpleFunction->__construct(Array) #1 {main} thrown in /var/www/wikiampe/data/www/test.megavolt-i.ru/tw/vendor/twig/twig/lib/Twig/SimpleFunction.php on line 26
 
Решение

Правильный код такой:
PHP:
<?php
    require_once 'vendor/autoload.php';
    
    $loader = new Twig_Loader_Filesystem('templates');
    $twig = new Twig_Environment($loader);

    class A {
        function phrase($param) {
            echo $param;
        }
    }

    $a = new A;
    $twig->addFunction('phrase', new Twig_SimpleFunction('phrase', [$a, 'phrase']));

    $template = $twig->loadTemplate('index2.html');
    echo $template->render(array('title' => 'Название страницы'));
 
Я предлагал на одно слово меньше писать, если чо, ну и внутри функции я заменил бы echo на return, и .html в имени шаблона заменил бы на .html.twig
 
Да и пхп без расширения работает, а хочется чтоб ide понимал
 
Сверху