0
votes

I have an odd situation where my add form works perfectly, but the edit form will not even load. Instead I get the following error:

Notice: Undefined property: DoctrineModule\Form\Element\ObjectSelect::$object in /vendor/zendframework/zendframework/library/Zend/Form/Element/Collection.php on line 517

Fatal error: Class name must be a valid object or a string in /vendor/zendframework/zendframework/library/Zend/Form/Element/Collection.php on line 517

I have objects of the class Application\Model\Record which have a many-to-many relationship to objects of the class Application\Model\Subject. I want the Subjects to appear as dropdowns in the Record forms, with the option to add multiple Subjects. So in the RecordFieldset.php I have:

$this->add(array(
    'name' => 'subjects',
    'type' => 'Zend\Form\Element\Collection',
    'options' => array(
        'label' => 'Subjects',
        'count' => 1,
        'should_create_template' => true,
        'allow_add' => true,
        'allow_remove' => true,
        'template_placeholder' => '__subjectindex__',
        'target_element' => array (
            'name' => 'subject',
            'type'  => 'DoctrineModule\Form\Element\ObjectSelect',
            'options' => array(
                'object_manager' => $this->objectManager,
                'target_class' => 'Application\Model\Subject',
                'property' => 'name',
                'empty_option' => 'Select a subject',
            ),
            'attributes' => array(
                'class' => 'form-control',
            ),
        ),
    ),
));

And like I said, this works perfectly in the Record add form. But it looks like on the edit form it cannot load the Subjects. Has anyone else tried something like this? Or do you have an idea what the error is saying?

Environment:
Zend Framework 2.3.3
Doctrine-orm-module 0.8.0
Doctrine 2.4.2

1

1 Answers

0
votes

Looks like this is a bug on ZF2, target elements need to be a fieldset for it to work otherwise it will run into this issue. Use a fieldset to wrap the ObjectSelect.