/** * @param \Phpro\AnnotatedForms\Event\FormEvent $event * @param \Zend\Form\Form $form * @param \Zend\Form\Element\Collection $collection * @param \Zend\Form\InputFilterProviderFieldset $fieldset * @param \Zend\InputFilter\InputFilter $inputFilter */ public function it_should_configure_collection_input_providers($event, $form, $collection, $fieldset, $inputFilter) { $event->getTarget()->willReturn($form); $form->getFieldsets()->willReturn(array($collection)); $form->getInputFilter()->willReturn($inputFilter); $collection->getName()->willReturn('collection'); $collection->getTargetElement()->willReturn($fieldset); $collection->getFieldsets()->willReturn(array($fieldset)); $fieldset->getFieldsets()->willReturn(array()); $fieldset->getInputFilterSpecification()->willReturn(array('name' => array('required' => true))); $this->configureCollectionInputFilter($event); $inputFilter->remove('collection')->shouldHaveBeenCalled(); $inputFilter->add(Argument::type('Zend\\InputFilter\\CollectionInputFilter'), 'collection')->shouldHaveBeenCalled(); }
/** * @param Collection $collection */ protected function configureInputFilter(Collection $collection) { // Make it a collection input filter $inputFilter = new CollectionInputFilter(); $inputFilter->setIsRequired(false); // Add the input filter of the target document as the real input filter: $targetElement = $collection->getTargetElement(); if ($targetElement instanceof InputFilterProviderInterface) { $configuredFilter = $targetElement->getInputFilterSpecification(); $inputFilter->setInputFilter($configuredFilter); } // Replace the current input filter in the actual form: $collectionName = $collection->getName(); $formFilter = $this->form->getInputFilter(); $formFilter->remove($collectionName); $formFilter->add($inputFilter, $collectionName); }