复选框的自定义Zend错误消息

时间:2009-05-05 21:45:21

标签: zend-framework validation

我在基于Zend的网站上有一个表单,其中包含必需的“条款和条件”复选框。

我设置了一条自定义信息,上面写着“您必须同意条款和条件”。

但是,因为复选框是“presence ='required'”,所以它返回

Field 'terms' is required by rule 'terms', but the field is missing

这是Zend框架中定义的常量:

self::MISSING_MESSAGE     => "Field '%field%' is required by rule '%rule%', but the field is missing",

我可以编辑此常量,但这会更改所有必需复选框的错误报告。

如何影响此特定案例的错误报告?

3 个答案:

答案 0 :(得分:14)

如果您使用Zend_Form_Element_Checkbox,可以customize the error messages on the Zend_Validate validators

$form->addElement('checkbox', 'terms', array(
  'label'=>'Terms and Services',
  'uncheckedValue'=> '',
  'checkedValue' => 'I Agree',
  'validators' => array(
    // array($validator, $breakOnChainFailure, $options)
    array('notEmpty', true, array(
      'messages' => array(
        'isEmpty'=>'You must agree to the terms'
      )
    ))
   ),
   'required'=>true,
);

您要确保未经检查的值为“空白”且该字段为“必需”

答案 1 :(得分:3)

您可以覆盖默认消息,如下所示:

$options = array(
                'missingMessage' => "Field '%field%' is required by rule '%rule%', dawg!"
            );

然后:

$input = new Zend_Filter_Input($filters, $validators, $myData);

$input = new Zend_Filter_Input($filters, $validators, $myData);
$input->setOptions($options);

......最后:

if ($input->hasInvalid() || $input->hasMissing()) {
  $messages = $input->getMessages();
}

Zend_Filter_Input manual页面上提及。

答案 2 :(得分:1)

关于@gnarf回答,对于那些可能以稍微不同的方式设置表单字段的人(比如我),您还可以执行以下操作:

$agree_tc_and_privacy = new Zend_Form_Element_Checkbox('agree_tc_and_privacy');
$agree_tc_and_privacy
->setLabel("My T&Cs Agreement text ...")
->addValidator('NotEmpty', false, array('messages' => 'You must and agree...'))
->setRequired(true)
->setOptions(
    array(
        'uncheckedValue'=> '', //important as explained by gnarf above
        'checkedValue' => '1',
    )
);
$this->addElement($agree_tc_and_privacy);