在Twig函数扩展中防止输出转义

use*_*356 24 symfony twig

我创建了一个Twig扩展:

{{ image ("image.png", 200) }}
Run Code Online (Sandbox Code Playgroud)

我知道我可以做

{{ image ("image.png", 200)|raw }}
Run Code Online (Sandbox Code Playgroud)

...但我更喜欢使用PHP代码,以便所有内容(来自此'图像'扩展名)都不会被转义.

我看不出这可能.

我知道我可以防止在Twig中所有输出转义,但我只想让这一个扩展不要逃避输出,其他一切都要这样做.

Hug*_*ois 36

这可以通过在扩展注册处添加选项来完成.

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

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


Sam*_*igh 11

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

public function getFunctions()
{
  return array(
     new \Twig_SimpleFunction(
        'image', 
        array($this, 'image'), 
        array('is_safe' => array('html')))
  );
}
Run Code Online (Sandbox Code Playgroud)


Wil*_*tes 5

我使用一个函数

$twig->addFunction(new \Twig_SimpleFunction('html', function ($code) {
   return new \Twig_Markup($code, "utf-8");
}));
Run Code Online (Sandbox Code Playgroud)
{{ html(myhtmlcode) }}
Run Code Online (Sandbox Code Playgroud)


sha*_*002 5

在 twig 版本 2 中你可以这样解决:

环境:Symfony 4 和 twig-bundle ^4.0

代码

public function getFilters(): array
{
    return [,
        new TwigFilter('image', [$this, 'image'], ['is_safe' => ['html']]),
    ];
}
Run Code Online (Sandbox Code Playgroud)