Zend 1.12 Zend / Form / Element - > addError()在Zend / FormI / Element的第2247行发出警告

时间:2013-06-12 17:47:53

标签: zend-framework zend-form-element

环境: Apache 2.4 Windows 8 PHP 5.4.14 Zend 1.12

我在表单上执行了一个非常非常简单的操作,在我的一个元素上添加了一条错误消息:

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

它为其他人创造奇迹,但就我而言,会发出警告:

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

只有当我尝试在MultiSelect元素上设置错误时才会发生这种情况,但如果我在另一个元素(如Text)上执行此操作,那么一切都很好,并且没有给出警告。所以我去检查警告线,并意识到问题是该元素的“getValue()”返回“NULL”,这对于框架代码中的foreach循环来说不是正确的值。但那是我的责任呢?

我的问题是,如果有人知道如何为multiSelect添加错误消息而不会弹出此警告。

由于

1 个答案:

答案 0 :(得分:1)

我无法使用以下内容重新创建您的错误:Apache 2.2.16,Php 5.3.7和Zf 1.12.5。

但这种行为相当奇怪。如果我在验证表单之前使元素无效(通过向元素添加错误),则看起来它会使表单验证短路并且错误消息不会应用于表单输出。

如果我尝试通过URL强制输入无效值,不是我的多选中的值,我会收到重复的错误消息,并且在haystack消息中找不到我之前设置的错误消息覆盖'X'。

$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());
}