选择元素验证

时间:2012-11-06 16:43:41

标签: zend-framework2 zend-form2

我的表单中有一个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。

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

3 个答案:

答案 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!' 
                    ),
                ),
            ),

        ),
    )));