فهرست منبع

Setting subject data form on retrieve form field element (#4248)

* Setting subject data form on retrieve form field element

AdminInterface::getFormBuilder signature doesn't accept any parameter currently (it do nothing with $subject) so, before that, the form does not have a binded data ($subject)
i.e their children cannot access to $form->getParent()->getData() into a custom form field type.

* Added test

* fix styleci
Yonel Ceruto 8 سال پیش
والد
کامیت
11fef95f4e
2فایلهای تغییر یافته به همراه18 افزوده شده و 7 حذف شده
  1. 1 0
      Controller/HelperController.php
  2. 17 7
      Tests/Controller/HelperControllerTest.php

+ 1 - 0
Controller/HelperController.php

@@ -153,6 +153,7 @@ class HelperController
         $formBuilder = $admin->getFormBuilder();
         $formBuilder = $admin->getFormBuilder();
 
 
         $form = $formBuilder->getForm();
         $form = $formBuilder->getForm();
+        $form->setData($subject);
         $form->handleRequest($request);
         $form->handleRequest($request);
 
 
         $view = $this->helper->getChildFormView($form->createView(), $elementId);
         $view = $this->helper->getChildFormView($form->createView(), $elementId);

+ 17 - 7
Tests/Controller/HelperControllerTest.php

@@ -390,6 +390,14 @@ class HelperControllerTest extends PHPUnit_Framework_TestCase
     {
     {
         $object = new AdminControllerHelper_Foo();
         $object = new AdminControllerHelper_Foo();
 
 
+        $request = new Request(array(
+            'code' => 'sonata.post.admin',
+            'objectId' => 42,
+            'field' => 'enabled',
+            'value' => 1,
+            'context' => 'list',
+        ), array(), array(), array(), array(), array('REQUEST_METHOD' => 'POST'));
+
         $modelManager = $this->createMock('Sonata\AdminBundle\Model\ModelManagerInterface');
         $modelManager = $this->createMock('Sonata\AdminBundle\Model\ModelManagerInterface');
         $modelManager->expects($this->once())->method('find')->will($this->returnValue($object));
         $modelManager->expects($this->once())->method('find')->will($this->returnValue($object));
 
 
@@ -400,6 +408,15 @@ class HelperControllerTest extends PHPUnit_Framework_TestCase
         $mockForm = $this->getMockBuilder('Symfony\Component\Form\Form')
         $mockForm = $this->getMockBuilder('Symfony\Component\Form\Form')
             ->disableOriginalConstructor()
             ->disableOriginalConstructor()
             ->getMock();
             ->getMock();
+
+        $mockForm->expects($this->once())
+            ->method('setData')
+            ->with($object);
+
+        $mockForm->expects($this->once())
+            ->method('handleRequest')
+            ->with($request);
+
         $mockForm->expects($this->once())
         $mockForm->expects($this->once())
             ->method('createView')
             ->method('createView')
             ->will($this->returnValue($mockView));
             ->will($this->returnValue($mockView));
@@ -438,13 +455,6 @@ class HelperControllerTest extends PHPUnit_Framework_TestCase
 
 
             $twig->addRuntimeLoader($runtimeLoader);
             $twig->addRuntimeLoader($runtimeLoader);
         }
         }
-        $request = new Request(array(
-            'code' => 'sonata.post.admin',
-            'objectId' => 42,
-            'field' => 'enabled',
-            'value' => 1,
-            'context' => 'list',
-        ), array(), array(), array(), array(), array('REQUEST_METHOD' => 'POST'));
 
 
         $pool = new Pool($container, 'title', 'logo');
         $pool = new Pool($container, 'title', 'logo');
         $pool->setAdminServiceIds(array('sonata.post.admin'));
         $pool->setAdminServiceIds(array('sonata.post.admin'));