Twig 当对象{{printed}时,它能告诉细枝不要转义输出吗

Twig 当对象{{printed}时,它能告诉细枝不要转义输出吗,twig,Twig,我遇到的情况是,发送到我的Twig模板的一些变量是普通的旧变量,因此我希望它们是html转义的(这是默认行为)。但发送到我的模板的其他变量实际上是带有uuu toString()渲染器的对象。。。其中一些对象发送原始HTML(例如,从所见即所得编辑器,如TinyMCE或CKEditor) 理想情况下,我希望我的模板设计者不必对对象使用|raw过滤器,而是让对象告诉Twig它们已经转义了 换句话说,我试图mimc设置的细枝函数的行为是安全的,但不要求模板设计者使用函数 例如,我可以在其定义中使用i

我遇到的情况是,发送到我的Twig模板的一些变量是普通的旧变量,因此我希望它们是html转义的(这是默认行为)。但发送到我的模板的其他变量实际上是带有uuu toString()渲染器的对象。。。其中一些对象发送原始HTML(例如,从所见即所得编辑器,如TinyMCE或CKEditor)

理想情况下,我希望我的模板设计者不必对对象使用
|raw
过滤器,而是让对象告诉Twig它们已经转义了

换句话说,我试图mimc设置
的细枝函数的行为是安全的,但不要求模板设计者使用函数

例如,我可以在其定义中使用
is_safe
参数编写一个细枝函数,并能够在我的模板中使用该参数:

{{ figure_out_what_to_do(something) }}
(其中
计算出\u要做什么
知道检查“某物”对象以确定是否需要转义)。但对我来说,这并不比必须记住在“某物”的每次输出后都加上
| raw
要好多少。因此,我希望能够做到这一点:

{{ something }}
…并让Twig认识到
某物
是一个对象,因此询问它是否需要转义

我猜答案是“不”,但我想我会问一下,以防有人谁知道更多关于树枝内部有任何指针给我


谢谢。

\uuu-toString()
方法中,您可以不返回html输出,而是执行以下操作:
返回新的细枝标记($html,'UTF-8')
因此将其标记为安全且不可转义

而不是在
\uuuuuToString()
中返回新的
\Twig\u标记
对象(这会导致致命错误,因为它必须返回字符串)。您可以扩展
\Twig\u标记

class某物扩展\Twig\u标记{
公共函数{
返回$this->safeValue;
}
公共功能计数(){
返回mb_strlen($this->safeValue);
}
}
Twig在决定是否转义字符串时,会查看对象是否是
\Twig\u标记的实例。以下是
\Twig\u标记的源代码:


/*
*此文件是Twig的一部分。
*
*(c)法比恩效价仪
*
*有关完整版权和许可证信息,请查看许可证
*与此源代码一起分发的文件。
*/
名称空间小枝;
/**
*将内容标记为安全的。
*
*@作者法比恩·普利蒂埃
*/
类标记实现\Countable
{
受保护的内容;
受保护的$charset;
公共函数构造($content,$charset)
{
$this->content=(字符串)$content;
$this->charset=$charset;
}
公共函数
{
返回$this->content;
}
公共功能计数()
{
return\function\u exists('mb\u get\u info')?mb\u strlen($this->content,$this->charset):\strlen($this->content);
}
}
类别名(“细枝\标记”、“细枝\标记”);

正如您在源代码中看到的,
\Twig\u标记
实现了
\Countable
。这就是为什么我在我的示例中重写了
公共函数count()
的实现。

这正是我想要的——谢谢!(但愿文档中有这样的内容)。仅供参考,我不能在
中使用它,因为PHP只允许从中返回实际字符串(而不是对象)。但是我可以使用其他一些方法来解决这个问题(比如使用一个包装器对象,它带有一个twig将调用的magic
\u get
方法,它可以决定是返回一个字符串还是twig\u标记对象)。@JordanLev,你让它工作了吗?如果是的话,你能告诉我怎么做吗?