我在基于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",
我可以编辑此常量,但这会更改所有必需复选框的错误报告。
如何影响此特定案例的错误报告?
答案 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);