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

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'),
        );
    }
4b9b3361

Ответ 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;
}