Php Zend form multiselect验证错误后重新填充
我有一个Zend form multiselect元素,我正在这样创建Php Zend form multiselect验证错误后重新填充,php,zend-framework,Php,Zend Framework,我有一个Zend form multiselect元素,我正在这样创建 $this->addElement('multiselect','somedates',array( 'filters'=>array('StringTrim'), 'required'=>true, 'label'=>'Dates', 'style' => 'width:14em', 'size'=>'4', 'RegisterInArra
$this->addElement('multiselect','somedates',array(
'filters'=>array('StringTrim'),
'required'=>true,
'label'=>'Dates',
'style' => 'width:14em',
'size'=>'4',
'RegisterInArrayValidator' => false, //otherwise it gives an error
));
然后我通过JavaScript将一些multi-options动态添加到multi-select中,multi-select基本上是一个YUI日历,用户在其中单击日期,然后作为选项进入multi-select
如果我为表单提供了所有必需的值,并且表单通过了isValid测试,那么一切都正常。但是,如果出现错误,其他每个元素都会重新填充提交的内容,但是multi-select会丢失所有选项,并且必须由用户自己重新填充。Multi-select似乎进展顺利,因为这是我在var dump$this->getRequest->getQuery时得到的结果;
这就是我得到的[somedates]=>array2{[0]=>string10 2010-09-09[1]=>string10 2010-09-10}
我只是想知道是否有其他人也有同样的经验,知道这里出了什么问题,或者Zend框架是否能够重新填充multi-select。问题是ZF希望用户选择您填充ZF multi-select的选项之一。当您使用Javascript添加选项时,ZF不知道这现在是一个有效选项,因此验证将失败。要解决此问题,您需要删除InArray验证程序
$this->getElement("somedates")->removeDecorator("InArray");
至于再次填充数组,一旦用户添加了它们,您需要将它们保存在某个地方,因此如果表单失败,ZF可以再次添加它们。提交表单时,您可以将这些日期附加到隐藏字段,检查此隐藏字段的值,并将这些日期添加回MultiSelect输入
确保验证隐藏字段中的输入,不要假设is包含正确的日期。您知道在调用
$form->isValid($this->getRequest()->getPost()/getQuery
但除非您执行以下操作,否则您的multi-select将无法填充:
$form->getElement('somedates')
->addMultiOptions($datesToGetItRepopulated);
我相信你对表单发送选项没有问题,在Post参数中也添加了multiselect的选项,对吗
要使addMultiOptions正常工作,请记住数组应具有以下格式:
$datesToGetItRepopulated = array(
array('key'=>heresGoesWhatYouwantAsTheValueForYourOption,
'value'=>hereGoesWhatYouWantAsTextForYourOption),
array('key'=>balbla, 'value'=>blabla)
....
);
如您所见,在调用addMultiOptions之前。。。方法,您将不得不从服务器处理您收到的“somedates”信息,以便它代表这种数组。这样,Zend_Form_Element_MultiSelect将知道如何使用选项填充它。有人回答并删除了答案,但我能够同时读取它,我需要在验证之前创建一个新的multi-select Form元素,然后通过传递关联数组向其添加MultiOptions。