Symfony2/Twig:如何告诉自定义的Twig标记不要转义输出



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

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

不幸的是,我不得不像那样使用它

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

有没有一种方法可以直接在树枝延伸处取消捕捉?

我的扩展注册缩略图代码如下:

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

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

Crozin的答案是正确的,但由于Twig_Function_Method现在已被弃用,您可以这样使用Twig_SimpleFunction

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

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

最新更新