Zend: Form validation: value was not found in the haystack error

You can also disable the InArray validator using 'disable_inarray_validator' => true:

For example:

    $this->add( array(
        'name'     => 'progressStatus',
        'type'     => 'DoctrineModule\Form\Element\ObjectSelect',
        'options' => array(
            'disable_inarray_validator' => true,
        ),

    )); 

Additionaly you should add you own InArray Validator in order to protect your db etc.

In Zend Framework 1 it looks like this:

$this->addElement('select', $name, array(
            'required' => true,
            'label' => 'Choose sth:',
            'filters' => array('StringTrim', 'StripTags'),
            'multiOptions' => $nestedArrayOptions,
            'validators' => array(
                array(
                    'InArray', true, array(
                        'haystack' => $flatArrayOptionsKeys,
                        'messages' => array(
                            Zend_Validate_InArray::NOT_IN_ARRAY => "Value not found"
                        )
                    )
                )
            )
        ));

Where $nestedArrayOptions is you multiOptions and $flatArrayOptionsKeys contains you all keys.


You could try to deactivate the validator:

in your Form.php

$field = $this->createElement('select', 'fieldname');
$field->setLabel('Second SELECT');
$field->setRegisterInArrayValidator(false);
$this->addElement($field);

The third line will deactivate the validator and it should work.


You may also add options to select element before checking for the form validation. This way you are insured the select value is in range.