环境: 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添加错误消息而不会弹出此警告。
由于
答案 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());
}