我的Zend\Form
包含Zend\Form\Element\Select
属性'multiple' => 'multiple'
和NotEmpty
验证程序,其中包含自定义isEmpty
错误消息。
使用多个属性集,当我提交表单而不选择任何选项时,我得到默认的"值是必需的..." 错误消息而不是我自己的错误消息。
当我删除multiple
属性时,我得到了所需的行为,即我的自定义错误消息。
那么,我做错了什么?
这是一个快速而肮脏的测试,为了演示而将所有内容都塞进我的控制器动作中:
public function testAction() {
$form = new \Zend\Form\Form;
$factory = new \Zend\InputFilter\Factory;
$form->add(
[
'name' => 'select',
'type' => 'Zend\Form\Element\Select',
'attributes' => [
'multiple' => 'multiple',
],
'options' =>[
'value_options' => ['' => '', 1 => "one", 2 => "two", 3 => "three"],
]
]
);
$filter = $factory->createInputFilter([
'select' => [
'name' => 'select',
'required' => true,
'filters' => [
['name' => 'StringTrim',],
],
'validators' => [[
'name' => 'NotEmpty',
'options' => ['messages' => ['isEmpty'=> 'all Dharmas are forms of Emptiness']],
]],
]
]);
$form->setInputFilter($filter);
$form->add(['name'=> 'submit','type'=> 'submit', 'attributes'=> ['value'=> 'submit']]);
$form->setAttribute('action','/my-project/index/test')
$view = new ViewModel();
$view->setTemplate('my-project/index/test')
->setVariables(['form' => $form]);
if ($this->getRequest()->isPost()) {
$data = $this->params()->fromPost();
$form->setData($data);
print_r($data); // just making sure, for sanity's sake
if ($form->isValid()) {
echo "valid!";
} else {
echo "validation failed.";
}
}
return $view;
}
只是为了记录,这里是视图,虽然我知道(通过转储错误消息)问题不在这里:
<?php
$form = $this->form;
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formCollection($form);
echo $this->form()->closeTag();
谢谢!
答案 0 :(得分:0)
这可能与设置multiple
字段会导致Select
类更改验证程序这一事实有关。
您可以看到here on line 227 in the getValidator
method of the Zend\Form\Element\Select
class。
$validator = new ExplodeValidator([
'validator' => $validator,
'valueDelimiter' => null, // skip explode if only one value
]);
ExplodeValidator
will validate each value independently以及您提供的验证程序,这可能会导致意外的&#34;值是必需的...&#34; 错误消息。最有可能验证者将on line 186设置$values
作为包含空字符串的数组。
我认为,如果您想要获取自定义消息,请为验证程序设置required => false
和'allow_empty' => false
。在你的情况下,我认为这应该不是一个问题......