Symfony2/Twig: как сообщить пользовательскому тегу twig, чтобы НЕ выйти из выхода
Я создал собственный тег, который должен работать следующим образом:
{{ thumbnail(image.fullPath,620) }}
К сожалению, я должен использовать его таким образом
{{ thumbnail(image.fullPath,620)|raw }}
Есть ли способ unescape непосредственно в расширении ветки?
Мое расширение регистрирует эскизный код следующим образом:
public function getFunctions()
{
return array(
'thumbnail' => new \Twig_Function_Method($this, 'thumbnail'),
);
}
Ответы
Ответ 1
Третий аргумент Twig_Function_Method::__construct()
- это массив опций для функции. Один из этих вариантов - is_safe
, который указывает, выводит ли функция "безопасный" код HTML/JavaScript:
public function getFunctions()
{
return array(
'thumbnail' => new \Twig_Function_Method($this, 'thumbnail', array(
'is_safe' => array('html')
))
);
}
Ответ 2
Ответ Крозина правильный, но поскольку \Twig_Function_Method
теперь устарел, вы можете использовать \Twig_SimpleFunction
как таковой:
return [
new \Twig_SimpleFunction('thumbnail', [$this, 'thumbnail'], [
'is_safe' => ['html']
]),
];
Ответ 3
Twig делает это так:
class Twig_Extension_Escaper extends Twig_Extension
{
...
public function getFilters()
{
return array(
new Twig_SimpleFilter('raw', 'twig_raw_filter', array('is_safe' => array('all'))),
);
}
...
}
...
function twig_raw_filter($string)
{
return $string;
}