Exemplo n.º 1
0
 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;
 }