2013-06-12 40 views
2

環境的2247行: 的Apache 2.4 的Windows 8 PHP 5.4.14 的Zend我是1.12Zend的Zend的1.12 /表格/元素 - > addError()在警告上的Zend/FormI /元

做我的表格上一個非常非常非常簡單的動作,就用我的元素之一添加一條錯誤消息:

$form->getElement('elemetnid')->addError('error'); 

它可以創造奇蹟對於其他人,但在我的情況下,它也給出了AW arning,上面寫着:

Warning: Invalid argument supplied for foreach() in ...\library\Zend\Form\Element.php on line 2247 

,當我試圖把我的多選元素上的錯誤時才發生,但如果我喜歡文字另一元件上這樣做,那麼一切都很好,並沒有給出警告。所以我去檢查警告的行,並意識到問題是該元素的「getValue()」返回「NULL」,並且這不是框架代碼中foreach循環的正確值。但那是我的責任?

我的問題是,如果有人知道如何在不彈出此警告的情況下爲multiSelect添加錯誤消息。

感謝

+0

爲什麼你必須分配給多選元素的錯誤消息。似乎用多選,你提供的值,用戶只是選擇。發生錯誤的可能性在哪裏需要向用戶發送消息?只是問... – RockyFord

+0

如果驗證失敗,它會自動添加一個錯誤,你只是想把自定義的錯誤信息? –

+0

我沒有按原樣使用多選,所以我認爲最好是創建一個自定義驗證器。它是動態添加多選項的用戶,並且他需要添加至少一個才能提交。 – Chayemor

回答

1

我不能重新創建錯誤:阿帕奇2.2.16,PHP 5.3.7和ZF 1.12.5。

雖然這種行爲很奇怪。如果我在驗證表單之前使元素無效(通過向元素添加錯誤),它看起來像短路表單驗證,並且錯誤消息不會應用於表單輸出。

如果我嘗試通過URL強制一個無效值,一個值不在我的多選中,我得到了重複的錯誤消息,並且我以前設置的錯誤消息覆蓋了'X'在haystack消息中未找到。

$form = new Zend_Form; 
$form->setMethod('GET'); 

$listOptions = array('one','two', 'three'); 
$select = new Zend_Form_Element_Multiselect('options', array(
     'multiOptions' => $listOptions, 
     'validators' => array(
       array('InArray', 
         false, 
         array(array_keys($listOptions))) 
      ) 
    )); 
$submit = new Zend_Form_Element_Submit('submit', array(
     'label' => 'Do something' 
    )); 
$form->addElements(array($select, $submit)); 

if(isset($_GET) && count($_GET)) { 
    if(true) 
     $select 
      ->addError('The form will never validate.') 
      ->addError('Two wrongs don\'t make a right.'); 

    $form->isValid($_GET); 
} 

$form->setView(new Zend_View); 
echo $form; 

if ($form->isErrors()) { 
    echo 'Form did not validate'; 
    var_dump($form->getErrors()); 
} 
+0

我可以確認這一行爲發生在ZF 1.12.5中。 –