我的表单中有一个Select元素,如下所示:
$this->add(array(
'name' => 'cat_id',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'Categoria',
'empty_option' => '',
'value_options' => array(
'' => '',
),
),
));
value_options
在我的控制器中充满了数据库信息...(有更好的方法吗?)
我有一个InputFilter,就像这样:
$this->add(array(
'name' => 'cat_id',
'required' => true,
'validators' => array(
array(
'name' => 'NotEmpty',
'break_chain_on_failure' => true,
'options' => array(
'messages' => array('isEmpty' => 'O campo "Categoria" é obrigatório'),
),
),
),
));
请注意,我想更改isEmpty
消息......这就是问题!
当我提交表格时,我仍然会收到相同的英文信息:
cat_id:
isEmpty : Value is required and can't be empty
所以我的问题是:为什么我仍然有这个消息?它来自哪里?我怎样才能改变它?
Ps。:使用Text元素,效果很好。只有选择元素我才会遇到这个问题。
额外问题:
如果我想使用InArray Validator,请执行以下操作:
array(
'name' => 'InArray',
'options' => array(
'haystack' => array( ... ),
'messages' => array(
'notInArray' => 'Valor não encontrado no banco de dados'
),
),
),
我需要一直填充haystack
fild?没有办法说验证者使用表格value_options
?
TNKS!
修改
我不确定,因为没有人确认过,但我猜ZF2会为您设置type
时对表单元素进行默认验证。
例如,
$this->add(array(
'name' => 'cat_id',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'empty_option' => '',
'value_options' => array(
// ...
),
),
'attributes' => array(
// ...
),
));
在这种情况下,ZF2会为Select元素创建一些默认验证,比如检查是否为空并检查haystack。
那么如何覆盖此验证中的消息?
答案 0 :(得分:3)
有一种方法可以解决这个问题。 它应该删除默认验证消息。 只需在表单的构造函数中添加该行。
<强> $这 - &GT; setUseInputFilterDefaults(假); 强>
答案 1 :(得分:0)
所以这已经过时了,但我想我会给出答案,希望有助于未来的搜索。
您有'required' => true,
作为选项之一。这会导致在该字段上进行验证。基本上与选择元素的NotEmpty验证器相同。
我没有对此进行测试,但我猜你是否删除'required' => true
并离开NoEmpty验证器,你会得到你的信息。
答案 2 :(得分:-1)
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'username',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' =>'NotEmpty',
'options' => array(
'messages' => array(
\Zend\Validator\NotEmpty::IS_EMPTY => 'User name can not be empty.'
),
),
),
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 20,
'messages' => array(
'stringLengthTooShort' => 'Please enter User Name between 4 to 20 character!',
'stringLengthTooLong' => 'Please enter User Name between 4 to 20 character!'
),
),
),
),
)));