我创建了简单的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,因为并不总是标签可以立即显示。
答案 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 %}
答案 2 :(得分:0)