我试图验证一个zend表单。但问题是形式上有三个字段,分别是国家,州和城市。我正在为这些字段发送有效数据,但它给我验证错误。仅适用于国家,州和城市。错误消息是:
请输入国家/地区名称。 请输入州名。 请输入城市名称
这是我的表单字段:
$country = new Zend_Form_Element_Select('country');
$country->setRequired(true)
->setAttrib('placeholder', 'Country')
->removeDecorator('DtDdWrapper')
->addErrorMessage('Please enter country name.')
->removeDecorator('HtmlTag')
->removeDecorator('Label');
$state = new Zend_Form_Element_Select('state');
$state->setRequired(true)
->setAttrib('placeholder', 'State')
->removeDecorator('DtDdWrapper')
->addErrorMessage('Please enter state name.')
->removeDecorator('HtmlTag')
->addMultiOptions(array("" => "Select State"))
->removeDecorator('Label');
$city = new Zend_Form_Element_Select('city');
$city->setRequired(true)
->setAttrib('placeholder', 'City')
->removeDecorator('DtDdWrapper')
->addErrorMessage('Please enter city name.')
->removeDecorator('HtmlTag')
->addMultiOptions(array("" => "Select City"))
->removeDecorator('Label');
这里发布数据:
Array (
[full_name] => Test User
[dob] => 2015-01-15
[gender] => 1
[address] => ddewewe
[country] => DZK
[state] => 26
[city] => 403564
[mobile_number] => 4535345345
[submit] => Save )
任何人都可以帮我发现这个问题吗?
谢谢,
微米。
答案 0 :(得分:1)
首先,您没有为options
中的国家/地区,州和城市下拉列表设置Zend_form
。您只设置了一个选项,其值为balnk""并且您已对required
字段应用了验证,因此它提供了上述错误。
您将收到另一个错误("在haystack&#34中找不到值;)因为您的Zend Form将匹配选择框的预先指定列表中的已发布值。由于验证器找不到您在POST
数据中发送的任何此类选项,因此会抛出错误。
您有以下方法可以解决这些问题。
取消激活验证程序以验证预先指定的数组中的已发布值,如下所示,并删除setRequired(true)
验证:
$country = new Zend_Form_Element_Select('country');
$country->setAttrib('placeholder', 'Country')
$country->setAttrib('placeholder', 'Country')
->removeDecorator('DtDdWrapper')
->removeDecorator('HtmlTag')
->removeDecorator('Label')
->setRegisterInArrayValidator(false); //This line will not check posted data in list
在zend_form
本身设置选项数组。
class RegistrationForm extends Zend_Form {
public function __construct($options = null) {
$country = new Zend_Form_Element_Select('country');
$country->setRequired(true)
->setAttrib('placeholder', 'Country')
->removeDecorator('DtDdWrapper')
->addErrorMessage('Please enter country name.')
->removeDecorator('HtmlTag')
->removeDecorator('Label');
foreach($options['countries'] as $option)
$country->addMultiOption(trim($option->code),trim($option->country_name));
}
}
并在其controller
的{{1}}传递数组中创建Zend表单对象。