[英]Set default value of an element in Zend_Form by reference from the controller
[英]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.