簡體   English   中英

Zend_Form:從一個元素中刪除默認過濾器

[英]Zend_Form: remove default filter from one element

我用我自己的 class 擴展了 Zend_Form 並讓我繼承了我所有的 forms 。 我的基類將默認過濾器應用於去除雙空格的所有表單元素,基本上:

return trim(preg_replace('/\s+/', ' ', $value));

雖然通常我希望在每個元素上都這樣做,但在某些情況下它會破壞東西,例如在 textareas 上(換行符也被刪除)所以我正在尋找一種方法來禁用某些元素上的默認過濾器。 我試過這個(不成功):

$element->clearFilters();

但是在 forms init() 方法中,尚未設置過濾器($element->getFilters() 返回一個空數組),只有在調用 __toString() 或 isValid() 之類的方法時才會應用它,但我寧願不覆蓋這些方法只是為了擺脫過濾器。 一定會有更好的辦法?!

最干凈的解決方案可能是選擇加入該過濾器並且默認不應用 - 但我寧願保持默認並找到排除某些元素的方法。

skooli ,OP,已經自我回答了這個問題:

引用:


解決!

setElementFilters()方法將遍歷當前添加到表單的所有元素並應用過濾器,所以現在我剛剛覆蓋了該方法,使其工作如下:

public function setElementFilters(array $filters) {
    foreach ($this->getElements() as $element) {
        if(!($element instanceof Zend_Form_Element_Textarea)) {
            $element->setFilters($filters);
        }
    }
    return $this;
}

雖然這適用於所有文本區域,但我不能排除其他類型的任意字段。 如果我需要,我可能會創建一個虛擬過濾器,它什么都不做,但可以用來確定是否應該省略fixWhitespaces過濾器。


注意: 自行回答您自己的問題是絕對可以的。 請僅將其作為真實答案發布,而不是在問題或評論中發布。 發布為真實答案有助於使“未答復”列表更加清晰(避免讓其他人浪費時間)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM