Symfony2 / Twig:如何告诉自定义twig标签不要逃避输出

时间:2012-03-09 12:00:58

标签: templates symfony twig

我创建了一个自定义标记,应该像这样工作:

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

不幸的是我必须像那样使用它

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

有没有办法直接在树枝延伸中进行unescape?

我的扩展程序会像下面这样注册缩略图代码:

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

3 个答案:

答案 0 :(得分:60)

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

答案 1 :(得分:9)

Crozin's answer是正确的,但由于\Twig_Function_Method现已弃用,您可以使用\Twig_SimpleFunction

return [
    new \Twig_SimpleFunction('thumbnail', [$this, 'thumbnail'], [
        'is_safe' => ['html']
    ]),
];

答案 2 :(得分: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;
}