0

我创建了简单的 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 因为标签并不总是应该立即显示。

4

3 回答 3

5

问题解决了

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

禁用此过滤器的自动转义。第三个参数Twig_Filter_Method

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

或者

array('is_safe'=>array('html'))在 PHP < 5.4.x 中

感谢您的提示。这很有帮助。

于 2013-07-04T09:10:35.440 回答
1

是的,使用原始过滤器!

或者如果你想全局禁用自动转义,你可以在你的配置中这样做:

twig:
# ...
  autoescape: false

或更精细地在您的模板中,您可以将其定义为专用的代码块

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

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

于 2013-07-04T09:03:07.693 回答
0

给大家 :

使用原始过滤器。

{{你的方法() | 生的}}

于 2013-07-04T08:51:55.090 回答