如何解决Zend_Form:从一个元素中删除默认过滤器
| 我用自己的类扩展了Zend_Form,并从中继承了我的所有表单。我的基类将默认过滤器应用于所有表单元素,这些元素会去除双倍空格,基本上是:return trim(preg_replace(\'/\\s+/\',\' \',$value));
虽然通常我希望在每个元素上都使用此功能,但是在某些情况下,它会破坏内容,例如在textareas上(换行符也将被删除),因此我正在寻找一种方法来禁用某些元素上的默认过滤器。
我尝试了这个(失败):
$element->clearFilters();
但是,在尚未设置过滤器的init()方法形式内($ element-> getFilters()返回一个空数组),仅当调用诸如__toString()或isValid()之类的方法时,它才会被应用,但我宁愿不要仅仅为了摆脱过滤器而覆盖那些方法。肯定有更好的办法?!
最干净的解决方案可能是选择加入该过滤器,而不是默认应用-但我宁愿将其保留为默认值,并找到一种排除某些元素的方法。
解决方法
OP skooli已经回答了以下问题:
引用:
解决!
setElementFilters()
方法将在当前添加到表单的所有元素上运行并应用过滤器,因此现在我已经覆盖了该方法,使其工作如下:
public function setElementFilters(array $filters) {
foreach ($this->getElements() as $element) {
if(!($element instanceof Zend_Form_Element_Textarea)) {
$element->setFilters($filters);
}
}
return $this;
}
虽然这适用于所有文本区域,但我不能排除其他类型的任意字段。我是否需要创建一个虚拟过滤器,该过滤器什么也不做,但可以用来确定是否应省略“ 4”过滤器。
注意:完全可以自行回答您的问题。请仅将其作为真实答案发布,而不是在问题或评论中发布。发布为真实答案有助于使“未答复”列表更加清晰(避免使其他人浪费时间)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。