有没有办法让twig将传递对象的方法视为安全?

时间:2012-10-17 16:46:56

标签: symfony twig

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

1 个答案:

答案 0 :(得分:2)

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

但是,如果知道模板引擎,可以使用枝条过滤器或功能,并且可以在其定义中将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创建移动到模板或树枝过滤器..