4

我的表单中有一个 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 元素创建一些默认验证,例如检查是否为空并检查大海捞针。

那么如何覆盖此验证中的消息?

4

3 回答 3

3

有一种方法可以解决这个问题。它应该删除默认的验证消息。只需在表单的构造函数中添加该行。

$this->setUseInputFilterDefaults(false);

于 2013-03-18T19:27:29.127 回答
0

所以这是旧的,但我想我会给出一个答案,希望能帮助未来的搜索。

你有'required' => true,你的选择之一。这也会导致在现场进行验证。本质上与 Select Elements 的 NotEmpty 验证器相同。

我没有对此进行测试,但我猜如果你删除'required' => true并留下 NoEmpty 验证器,你会收到你的消息。

于 2013-05-17T15:20:44.483 回答
-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!' 
                    ),
                ),
            ),

        ),
    )));
于 2012-11-06T17:33:26.983 回答