29

我创建了一个 Twig 扩展:

{{ image ("image.png", 200) }}

嗨,我知道我能做到

{{ image ("image.png", 200)|raw }}

...但我更喜欢使用 PHP 代码,这样所有内容(来自这个“图像”扩展名)都不会被转义。

我看不出这可能。

我知道我可以防止 Twig 中的所有输出转义,但我只希望这个扩展不要转义输出,以及其他一切都这样做。

4

4 回答 4

43

这可以通过在扩展注册时添加一个选项来完成。

public function getFilters(){
    return array(
        // ...
        'image' => new \Twig_Filter_Method($this, 'imageFilter',
            array('is_safe' => array('html'))
        ),
        // ...
    );
}

这将提供未转义的输入 HTML 并返回未转义的 HTML 输出。如果您需要使用转义的 HTML 输入,请参阅选项'pre_escaped' => 'html'.

于 2013-03-31T14:12:00.883 回答
14

对于树枝功能扩展,请执行此操作

public function getFunctions()
{
  return array(
     new \Twig_SimpleFunction(
        'image', 
        array($this, 'image'), 
        array('is_safe' => array('html')))
  );
}
于 2014-10-16T06:19:09.433 回答
4

在 twig 版本 2 中,您可以像这样解决它:

环境:Symfony 4 和 twig-bundle ^4.0

代码

public function getFilters(): array
{
    return [,
        new TwigFilter('image', [$this, 'image'], ['is_safe' => ['html']]),
    ];
}
于 2018-12-04T21:58:43.440 回答
2

我使用一个函数

$twig->addFunction(new \Twig_SimpleFunction('html', function ($code) {
   return new \Twig_Markup($code, "utf-8");
}));
{{ html(myhtmlcode) }}
于 2018-05-21T10:18:40.340 回答