Как я могу добавить пользовательскую функцию в twig (symfony3)?

#php #twig #symfony

#php #twig #symfony

Вопрос:

я добавил этот код в service.yml

 //app/config/services.yml
services:
TwigEkler:
  class: MainBundleTwigTwigEkler
  tags:
     - { name: TwigEkler }
  

и создал этот файл

 //src/MainBundle/Twig/TwigEkler.php
<?

namespace MainBundleTwig;

class TwigEkler extends Twig_Extension
{
    public function getFunctions()
    {
        return array(
            new Twig_SimpleFunction('gecis', array($this, 'gecisFunction')),
        );
    }

    public function gecisFunction($param)
    {
        if ($param == '4') {
            return 'FAT';
        }  else {
            return '';
        }
    }

    public function getName()
    {
        return 'TwigEkler';
    }

}?>
  

и использовал ее в twig

 {{ gecis(level) }}
  

но я получаю эту ошибку

запрос.КРИТИЧЕСКОЕ: неперехваченное исключение PHP Twig_Error_Syntax: «Неизвестная функция «gecis» в «gecis / gecis.html.twig» в строке 24.» в C:wamp64wwwdenemevendortwigtwiglibTwigExpressionParser.php строка 573 {«исключение»:»[объект] (Twig_Error_Syntax(код: 0): неизвестная функция «gecis» в «gecis/gecis.html.twig » в строке 24. в C:wamp64wwwdenemevendortwigtwiglibTwigExpressionParser.php:573 )»}

в чем моя ошибка?

Комментарии:

1. Я думаю, что ваша ошибка используется в объявлении ваших тегов. Попробуйте заменить имя тега на { name: twig.extension }

2. из кулинарной книги

3. извините за задержку, но доктрина сводит меня с ума 🙂 @ciurciurek; там изменилось, и ничего не изменилось. но попытка очистить кеш выдает новую ошибку «[Symfony Component Debug Exception ClassNotFoundException] Попытался загрузить класс «TwigEkler» из пространства имен «mainBundle Twig». Вы забыли инструкцию «use» для другого пространства имен? » [в] DarkBee; я прочитал и следую инструкциям, но безуспешно: (

4. я решил через эту страницу amanvarshney. blogspot.com.tr/2011/12 /…

5. @MC_delta_T так что же было не так? Вы должны опубликовать это как ответ, чтобы ваш вопрос не казался нерешенным.

Ответ №1:

 you need to follow

create a directory  in your AppBundle " Extensions "

and create a file " TwigExtensions.php "

In that file you need to define:

    namespace AppBundleExtensions;

    use SymfonyBridgeDoctrineRegistryInterface;
    use AppBundleHelperCommonHelper;

    class TwigExtensions extends Twig_Extension
    {
        public function __construct(RegistryInterface $doctrine){
            $this->doctrine = $doctrine;
        }

    }

Use 

  public function getFunctions(){
    //Define your function that you    
}


}

Than create  the function that you have define in " getFunctions".

Now you can use that function on twig.