zend表单验证错误

时间:2015-01-14 23:47:04

标签: php forms validation zend-framework

我试图验证一个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 )

任何人都可以帮我发现这个问题吗?

谢谢,

微米。

1 个答案:

答案 0 :(得分:1)

首先,您没有为options中的国家/地区,州和城市下拉列表设置Zend_form。您只设置了一个选项,其值为balnk""并且您已对required字段应用了验证,因此它提供了上述错误。

您将收到另一个错误("在haystack&#34中找不到值;)因为您的Zend Form将匹配选择框的预先指定列表中的已发布值。由于验证器找不到您在POST数据中发送的任何此类选项,因此会抛出错误。

您有以下方法可以解决这些问题。

  1. 取消激活验证程序以验证预先指定的数组中的已发布值,如下所示,并删除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
    
  2. 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表单对象。