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

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "PEAR/Smarty, PECL & другие модули PHP", создана пользователем NikitOS, 29 окт 2018.

  1. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    Всем привет!
    Сделал свою функцию для 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' => 'Заголовок страницы'));
    Да, функцией назвать это сложно, но это тест.
    Так вот, как сделать эту функцию с ООП подходом? Как бы не пытался результата нет.
     
  2. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    Код:
    class A{
      function phrase($param) {
            echo $param;
        }
    }
    
    $a = new A;
    $twig->addFunction(new Twig_SimpleFunction('phrase',[$a, 'phrase']));
     
  3. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    Если так, то не работает
    Код:
    <?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' => 'Название страницы'));
     
  4. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    а если как я написал?

    и это
    это не ответ, что, где, какое сообщение?
     
  5. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    @WMix, я ваш код добавил в свой, не работает.
    Или я что-то не так делаю? :( :( :(
     
  6. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    ты ошибся
     
  7. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    О каком сообщении речь??
     
  8. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    об ошибке
     
  9. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    Ни на экране, ни в логах ошибок нет
     
  10. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    NikitOS нравится это.
  11. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
     
  12. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    и что там написано (по русски)?
     
  13. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    А, смешно, не спорю. Код с ошибкой был в плане :D
     
  14. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
     
  15. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    Решение

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

        class 
    {
            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' => 'Название страницы'));
     
  16. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    Я предлагал на одно слово меньше писать, если чо, ну и внутри функции я заменил бы echo на return, и .html в имени шаблона заменил бы на .html.twig
     
  17. NikitOS

    NikitOS Иномирянин

    Сообщения:
    15
    Ваш город:
    Дорогобуж, Смоленская область, Россия
    Address:
    Dorogobuzh, Russia
    Country:
    Location on Map:
    Я уже :)
    А может вообще без расширения? Тоже работает
     
  18. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    6.311
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    Да и пхп без расширения работает, а хочется чтоб ide понимал