Twig过滤器和引号返回

时间:2013-07-04 08:41:56

标签: php twig

我创建了简单的Twig过滤器

class Twig_Extension_Form extends Twig_Extension{
public function getName() {
    return 'Form';
}

public function getFilters() {
    return [
        'fLabel'=>new Twig_Filter_Method($this,'label_filter')
    ];
}

public function getFunctions() {
    return [];
}

public function label_filter($string,$id=null,$class=null){
    return '<label'.(!is_null($id)&&is_string($id)?' id="'.$id.'"':null).(!is_null($class)&&is_string($class)?' class="'.$class.'"':null).'>'.$string.'</label>';
}}

过滤器工作正常但当我在浏览器中显示代码时,实体上会替换引号。当我使用echo而不是返回过滤器工作正常。

我想要使用return,因为并不总是标签可以立即显示。

3 个答案:

答案 0 :(得分:4)

问题解决了

public function getFilters() {
    return [
        'fLabel'=>new Twig_Filter_Method($this,'label_filter',['is_safe'=>['html']])
    ];
}

禁用此过滤器的自动窗口。 Twig_Filter_Method的第三个参数是

['is_safe'=>['html']]

PHP中的

array('is_safe'=>array('html'))&lt; 5.4.x版本

感谢提示。这很有帮助。

答案 1 :(得分:1)

是的,请使用原始过滤器!

或者如果要全局禁用autoescape,可以在配置中执行此操作:

twig:
# ...
  autoescape: false
在模板中

或更精确,您可以将其定义为专用代码块

{% autoescape false %}
...
{% endautoescape %}

见这里:http://twig.sensiolabs.org/doc/tags/autoescape.html

答案 2 :(得分:0)

适合所有人:

使用raw过滤器。

{{yourmethod()|生}}