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

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' => 'Заголовок страницы'));
Да, функцией назвать это сложно, но это тест.
Так вот, как сделать эту функцию с ООП подходом? Как бы не пытался результата нет.
 

WMix

герр M:)ller
Партнер клуба
Код:
class A{
  function phrase($param) {
        echo $param;
    }
}

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

NikitOS

Иномирянин
Код:
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' => 'Название страницы'));
 

NikitOS

Иномирянин
@WMix, я ваш код добавил в свой, не работает.
Или я что-то не так делаю? :( :( :(
 

NikitOS

Иномирянин
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
 

NikitOS

Иномирянин
Решение

Правильный код такой:
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' => 'Название страницы'));
 

WMix

герр M:)ller
Партнер клуба
Я предлагал на одно слово меньше писать, если чо, ну и внутри функции я заменил бы echo на return, и .html в имени шаблона заменил бы на .html.twig
 

WMix

герр M:)ller
Партнер клуба
Да и пхп без расширения работает, а хочется чтоб ide понимал
 
Сверху