6
votes

I'm having a form with an element username. There are two validators: NotEmpty and StringLength. The custom error messages for StringLength are working, but somehow it does not use the custom error message for the NotEmpty validator. In ZF1 the notEmpty validator was added automatically when making an element required which could be turned off. I can't find such an option in ZF2 and maybe my NotEmpty validator is not used because it was already added by the required flag!?

    $inputFilter->add($factory->createInput(array(
        'name'     => 'username',
        'required' => true,
        'filters'  => array(
            array(
                'name' => 'StringTrim'
            ),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
                'options' => array(
                    'messages' => array(
                        NotEmpty::IS_EMPTY => 'Bitte geben Sie Ihren Benutzernamen ein.',
                    ),
                ),
            ),
            array(
                'name' => 'StringLength',
                'options' => array(
                    'min' => 3,
                    'max' => 45,
                    'messages' => array(
                        StringLength::TOO_SHORT => 'Der Benutzername muss mindestens 3 Zeichene lang sein.',
                        StringLength::TOO_LONG => 'Der Benutzername darf maximal 45 Zeichen lang sein.',
                    )
                ),
            ),
        ),
    )));
2
First thing to do would be to var_dump($form->getMessages()) to see what message key is actually used. Maybe the required message gets checked before the is_empty check and therefore you don't even reach the is_empty check. Check if NotEmpty::IS_EMPTY equals the message key from the output messagesSam
@Sam, ofc it's the same key...Andreas Linden

2 Answers

5
votes

The ZF2 Form, by default, adds validators for the different form elements automatically when creating them. To prevent the defaults from being added and only have your validators present, you need to add to the form constructor:

$this->setUseInputFilterDefaults(false);

This will prevent the Form object from adding those default validators. Now when you add your own NotEmpty, or any other element for that matter, validator with a custom message, that message is used instead of the default one.

2
votes

It was a bug in the version I was using. After updating to the latest revision on GitHub it works fine.