讓我們開始這一關的短代碼片段,我會用它來證明我的觀點:Zend框架形式非理性行爲
$title = new Zend_Form_Element_Text('title', array(
'label' => 'Title',
'required' => false,
'filters' => array(
'StringTrim',
'HtmlEntities'
),
'validators' => array(
array('StringLength', false, array(3, 100))
),
));
這重要的一行是:
'required' => false,
這意味着輸入字段不是必需的,您可以提交表單而不填寫它。但是,這也意味着如果您選擇填寫此字段,則任何篩選器和驗證器都不適用於此篩選器和驗證器。
常識告訴我,是不理智的行爲。我理解的關係與HTML輸入字段「需要」這個詞的方式:即不要求應該返回NULL如果沒有填寫,但如果用戶決定以填補它兩個過濾器和驗證應適用於它的輸入字段。這對我來說很有意義。你同意我還是我的常識不常見?我現在更實際的問題,因爲這是Zend_Form的行爲方式,我如何實現不需要的字段,如上所述(如果沒有用戶輸入,它將返回NULL,否則通常應用過濾器和驗證器)。
還沒解決,因爲你不能離開必填字段爲空,所以你會得到一個異常。而不是必需的字段不處理過濾器和驗證器,所以它也不會在那裏工作。 – 2009-08-30 19:05:09
我可能找到了你的解決方案;在allowEmpty元命令,請參見: http://tinyurl.com/lcyadz 不過,你確定過濾器沒有被應用或者如果不需要現場? (我稍後會做一個測試,因爲我現在很好奇)但是這聽起來很奇怪。 http://framework.zend.com/manual/en/zend.filter.input.html#zend.filter.input.metacommands。allow-empty – 2009-08-30 19:58:40
所以基本上,要得到你想要的:將字段設置爲required,應用驗證器和過濾器,並將空值應用於空過濾器,並將meta命令設置爲allowEmpty。這應該做的伎倆(我認爲) – 2009-08-30 20:00:47