我的表单中有一个 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 元素,效果很好。只有使用 Select 元素我才会遇到这个问题。
额外的问题:
如果我想使用 InArray Validator,如下所示:
array(
    'name'    => 'InArray',
    'options' => array(
        'haystack' => array( ... ),
        'messages' => array(
            'notInArray' => 'Valor não encontrado no banco de dados' 
        ),
    ),
),
我需要总是填补这个haystack领域?没有办法告诉验证器使用表单value_options?
天呐!
编辑
我不确定,因为没有人证实这一点,但我猜 ZF2 在您设置表单元素时会对表单元素进行默认验证type。
举个例子,
$this->add(array(
    'name' => 'cat_id',
    'type' => 'Zend\Form\Element\Select',
    'options' => array(
        'empty_option' => '',
        'value_options' => array(
            // ...
        ),
    ),
    'attributes' => array(
        // ...
    ),
));
在这种情况下,ZF2 会为 Select 元素创建一些默认验证,例如检查是否为空并检查大海捞针。
那么如何覆盖此验证中的消息?