Подтвердить что ты не робот

Предотвращение выхода экранов в расширение функции Twig

Я создал расширение Twig:

{{ image ("image.png", 200) }}

Я знаю, что могу просто сделать

{{ image ("image.png", 200)|raw }}

... но я бы предпочел использовать PHP-код, чтобы все (из этого расширения "изображение" ) не экранировалось.

Я не вижу, чтобы это было возможно.

Я знаю, что могу предотвратить все выходные экраны в Twig, но я просто хочу, чтобы это расширение не удалялось, и все остальное для этого.

4b9b3361

Ответ 1

Это можно сделать, добавив вариант в регистрацию продления.

public function getFilters(){
    return array(
        // ...
        'image' => new \Twig_Filter_Method($this, 'imageFilter',
            array('is_safe' => array('html'))
        ),
        // ...
    );
}

Это обеспечит несвязанный входной HTML-код и возвращает неэкзацированный вывод HTML. Если вам нужно работать со скрытым вводом HTML, см. Опцию 'pre_escaped' => 'html'.

Ответ 2

Для расширения функции twig сделайте это

public function getFunctions()
{
  return array(
     new \Twig_SimpleFunction(
        'image', 
        array($this, 'image'), 
        array('is_safe' => array('html')))
  );
}

Ответ 3

Я использую функцию

$twig->addFunction(new \Twig_SimpleFunction('html', function ($code) {
   return new \Twig_Markup($code, "utf-8");
}));
{{ html(myhtmlcode) }}

Ответ 4

В версии twig 2 вы можете решить это следующим образом:

среда: Symfony 4 и twig-bundle ^ 4.0

код:

public function getFilters(): array
{
    return [,
        new TwigFilter('image', [$this, 'image'], ['is_safe' => ['html']]),
    ];
}