Предотвращение выхода экранов в расширение функции Twig
Я создал расширение Twig:
{{ image ("image.png", 200) }}
Я знаю, что могу просто сделать
{{ image ("image.png", 200)|raw }}
... но я бы предпочел использовать PHP-код, чтобы все (из этого расширения "изображение" ) не экранировалось.
Я не вижу, чтобы это было возможно.
Я знаю, что могу предотвратить все выходные экраны в Twig, но я просто хочу, чтобы это расширение не удалялось, и все остальное для этого.
Ответы
Ответ 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']]),
];
}