0

我在对传递给我的树枝模板的对象的方法调用中遇到了树枝转义输出的问题。我知道我可以使用|raw过滤器解决这个问题,但希望有一种方法可以简单地在我的对象中指定某些方法是安全的,从而消除对原始过滤器的需求。

4

1 回答 1

2

对象本身的方法调用不能使 html 安全,因为普通对象/实体不(也不应该)知道模板引擎。

但是,twig 过滤器或函数如果知道模板引擎并且可以在其定义中标记为 html 安全。

所以你需要做的是实现一个html安全的树枝过滤器来传递对象并在过滤器函数中调用你的对象的方法。

我猜您的模板如下所示:

<p>{{myObj.getHtmlRepresentation()|raw}}</p>

现在您需要实现一个树枝过滤器并将模板更改为以下内容:

<p>{{myObj|html_representation}}</p>

树枝扩展应如下所示:

class MyTwigExtension {

    public function getFilters(){
       return array(
        // the magic is the is_safe=>html option
        'html_representation' => new \Twig_Filter_Method($this,'htmlRepresentation',array('is_safe'=>array('html'))),
    }

    public function htmlRepresentation($obj){
        return $obj->getHtmlRepresentation();
    }

 }

一个设计考虑:如果您的对象是某种业务对象的实体,它不应该创建 html,但您应该将 html 创建移动到模板或树枝过滤器。

于 2012-10-18T08:18:14.467 回答