public function testPreserveEntitiesBoundToCollectionAfterValidation() { $this->form->setInputFilter(new \Zend\InputFilter\InputFilter()); $fieldset = new TestAsset\ProductCategoriesFieldset(); $fieldset->setUseAsBaseFieldset(true); $product = new Entity\Product(); $product->setName('Foobar'); $product->setPrice(100); $c1 = new Entity\Category(); $c1->setId(1); $c1->setName('First Category'); $c2 = new Entity\Category(); $c2->setId(2); $c2->setName('Second Category'); $product->setCategories(array($c1, $c2)); $this->form->add($fieldset); $this->form->bind($product); $data = array('product' => array('name' => 'Barbar', 'price' => 200, 'categories' => array(array('name' => 'Something else'), array('name' => 'Totally different')))); $hash1 = spl_object_hash($this->form->getObject()->getCategory(0)); $this->form->setData($data); $this->form->isValid(); $hash2 = spl_object_hash($this->form->getObject()->getCategory(0)); // Returned object has to be the same as when binding or properties // will be lost. (For example entity IDs.) $this->assertTrue($hash1 == $hash2); }
protected function processForm(Form $form, $options = array(), $extra1 = null, $extra2 = array()) { /** * Special case for a simpler API: if the second argument is a string, it is used as the route to redirect * to, the third argument as the route parameters and the fourth argument as additional options. */ if (is_string($options)) { $options = array('redirect_route' => $options, 'redirect_params' => $extra1); $options = $options + $extra2; } if ($options && isset($options['object_manager'])) { $objectManager = $options['object_manager']; } else { $objectManager = $this->getEntityManager(); } /** @var $request Request */ $request = $this->getRequest(); if ($request->isPost()) { $form->setData($request->getPost()); if ($form->isValid()) { $form->bindValues(); $objectManager->persist($form->getObject()); $objectManager->flush(); if (!empty($options['success_message'])) { $this->flashMessenger()->addMessage($options['success_message']); } if (!empty($options['redirect_route'])) { $params = array(); if (!empty($options['redirect_params'])) { $params = $options['redirect_params']; if (is_callable($params)) { $params = call_user_func($params, $form); } } return $this->redirect()->toRoute($options['redirect_route'], $params); } } } return null; }
/** * Возвращает объект привязанный к форме * * @param Form $form * * @return mixed * @throws \Assert\AssertionFailedException */ protected function getFormObject(Form $form) { $form->bindValues(); $object = $form->getObject(); Assertion::isInstanceOf($object, GitLabDto::class); return $object; }