Symfony2 / Twig: как указать пользовательскому тегу ветки НЕ выходить из вывода - PullRequest
19 голосов
/ 09 марта 2012

Я создал пользовательский тег, который должен работать следующим образом:

{{ thumbnail(image.fullPath,620) }}

к сожалению я должен использовать это так

{{ thumbnail(image.fullPath,620)|raw }}

Есть ли способ удалиться прямо из расширения ветки?

Мое расширение регистрирует код миниатюры так:

 public function getFunctions()
    {
        return array(
            'thumbnail' => new \Twig_Function_Method($this, 'thumbnail'),
        );
    }

Ответы [ 3 ]

60 голосов
/ 09 марта 2012

Третий аргумент 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')
        ))
    );
}
9 голосов
/ 11 декабря 2014

Ответ Крозина правильный, но поскольку \Twig_Function_Method устарел, вы можете использовать \Twig_SimpleFunction как таковой:

return [
    new \Twig_SimpleFunction('thumbnail', [$this, 'thumbnail'], [
        'is_safe' => ['html']
    ]),
];
3 голосов
/ 19 июня 2014

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...