Browse Source

Remove request object from the object constructor

Thomas Rabaix 13 years ago
parent
commit
395f833a1c
3 changed files with 47 additions and 53 deletions
  1. 33 38
      Controller/HelperController.php
  2. 1 2
      Resources/config/core.xml
  3. 13 13
      Tests/Controller/HelperControllerTest.php

+ 33 - 38
Controller/HelperController.php

@@ -26,11 +26,6 @@ class HelperController
      */
     protected $twig;
 
-    /**
-     * @var Symfony\Component\HttpFoundation\Request
-     */
-    protected $request;
-
     /**
      * @var \Sonata\AdminBundle\Admin\AdminHelper
      */
@@ -43,30 +38,30 @@ class HelperController
 
     /**
      * @param \Twig_Environment $twig
-     * @param \Symfony\Component\HttpFoundation\Request $request
      * @param \Sonata\AdminBundle\Admin\Pool $pool
      * @param \Sonata\AdminBundle\Admin\AdminHelper $helper
      */
-    public function __construct(\Twig_Environment $twig, Request $request, Pool $pool, AdminHelper $helper)
+    public function __construct(\Twig_Environment $twig, Pool $pool, AdminHelper $helper)
     {
         $this->twig     = $twig;
-        $this->request  = $request;
         $this->pool     = $pool;
         $this->helper   = $helper;
     }
 
     /**
      * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+     * @param \Symfony\Component\HttpFoundation\Request $request
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function appendFormFieldElementAction()
+    public function appendFormFieldElementAction(Request $request)
     {
-        $code       = $this->request->get('code');
-        $elementId  = $this->request->get('elementId');
-        $objectId   = $this->request->get('objectId');
-        $uniqid     = $this->request->get('uniqid');
+        $code       = $request->get('code');
+        $elementId  = $request->get('elementId');
+        $objectId   = $request->get('objectId');
+        $uniqid     = $request->get('uniqid');
 
         $admin      = $this->pool->getInstance($code);
+        $admin->setRequest($request);
 
         if ($uniqid) {
             $admin->setUniqid($uniqid);
@@ -82,7 +77,6 @@ class HelperController
         }
 
         $admin->setSubject($subject);
-        $admin->setRequest($this->request);
 
         list($fieldDescription, $form) = $this->helper->appendFormFieldElement($admin, $elementId);
 
@@ -100,18 +94,22 @@ class HelperController
 
     /**
      * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+     * @param \Symfony\Component\HttpFoundation\Request $request
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function retrieveFormFieldElementAction()
+    public function retrieveFormFieldElementAction(Request $request)
     {
-
-        $code       = $this->request->get('code');
-        $elementId  = $this->request->get('elementId');
-        $objectId   = $this->request->get('objectId');
-        $uniqid     = $this->request->get('uniqid');
+        $code       = $request->get('code');
+        $elementId  = $request->get('elementId');
+        $objectId   = $request->get('objectId');
+        $uniqid     = $request->get('uniqid');
 
         $admin       = $this->pool->getInstance($code);
 
+        if ($uniqid) {
+            $admin->setUniqid($uniqid);
+        }
+
         if ($objectId) {
             $subject = $admin->getModelManager()->find($admin->getClass(), $objectId);
             if (!$subject) {
@@ -121,16 +119,12 @@ class HelperController
             $subject = $admin->getNewInstance();
         }
 
-        if ($uniqid) {
-            $admin->setUniqid($uniqid);
-        }
-
         $admin->setSubject($subject);
-        
+
         $formBuilder = $admin->getFormBuilder($subject);
 
         $form = $formBuilder->getForm();
-        $form->bindRequest($this->request);
+        $form->bindRequest($request);
 
         $view = $this->helper->getChildFormView($form->createView(), $elementId);
 
@@ -145,13 +139,14 @@ class HelperController
 
     /**
      * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+     * @param \Symfony\Component\HttpFoundation\Request $request
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function getShortObjectDescriptionAction()
+    public function getShortObjectDescriptionAction(Request $request)
     {
-        $code       = $this->request->get('code');
-        $objectId   = $this->request->get('objectId');
-        $uniqid     = $this->request->get('uniqid');
+        $code       = $request->get('code');
+        $objectId   = $request->get('objectId');
+        $uniqid     = $request->get('uniqid');
 
         $admin       = $this->pool->getInstance($code);
 
@@ -183,21 +178,21 @@ class HelperController
     }
 
     /**
-     * Toggle boolean value of property in list
+     * @param \Symfony\Component\HttpFoundation\Request $request
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function setObjectFieldValueAction()
+    public function setObjectFieldValueAction(Request $request)
     {
-        $field      = $this->request->get('field');
-        $code       = $this->request->get('code');
-        $objectId   = $this->request->get('objectId');
-        $value      = $this->request->get('value');
-        $context    = $this->request->get('context');
+        $field      = $request->get('field');
+        $code       = $request->get('code');
+        $objectId   = $request->get('objectId');
+        $value      = $request->get('value');
+        $context    = $request->get('context');
 
         $admin       = $this->pool->getInstance($code);
 
         // alter should be done by using a post method
-        if ($this->request->getMethod() != 'POST') {
+        if ($request->getMethod() != 'POST') {
             return new Response(json_encode(array('status' => 'KO', 'message' => 'Expected a POST Request')), 200, array(
                 'Content-Type' => 'application/json'
             ));

+ 1 - 2
Resources/config/core.xml

@@ -45,9 +45,8 @@
         </service>
 
         <!-- controller as services -->
-        <service id="sonata.admin.controller.admin" class="Sonata\AdminBundle\Controller\HelperController" scope="request">
+        <service id="sonata.admin.controller.admin" class="Sonata\AdminBundle\Controller\HelperController">
             <argument type="service" id="twig" />
-            <argument type="service" id="request" />
             <argument type="service" id="sonata.admin.pool" />
             <argument type="service" id="sonata.admin.helper" />
         </service>

+ 13 - 13
Tests/Controller/HelperControllerTest.php

@@ -43,7 +43,7 @@ class AdminControllerHelper_Foo
     }
 }
 
-class AdminControllerHelperTest extends \PHPUnit_Framework_TestCase
+class AdminHelperTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @expectedException Symfony\Component\HttpKernel\Exception\NotFoundHttpException
@@ -59,9 +59,9 @@ class AdminControllerHelperTest extends \PHPUnit_Framework_TestCase
         ));
         $pool = new Pool($container, 'title', 'logo');
         $helper = new AdminHelper($pool);
-        $controller = new HelperController($twig, $request, $pool, $helper);
+        $controller = new HelperController($twig, $pool, $helper);
 
-        $controller->getShortObjectDescriptionAction();
+        $controller->getShortObjectDescriptionAction($request);
     }
 
     public function testgetShortObjectDescriptionActionObjectDoesNotExist()
@@ -84,9 +84,9 @@ class AdminControllerHelperTest extends \PHPUnit_Framework_TestCase
 
         $helper = new AdminHelper($pool);
 
-        $controller = new HelperController($twig, $request, $pool, $helper);
+        $controller = new HelperController($twig, $pool, $helper);
 
-        $response = $controller->getShortObjectDescriptionAction();
+        $response = $controller->getShortObjectDescriptionAction($request);
 
         $this->assertEmpty($response->getContent());
     }
@@ -121,9 +121,9 @@ class AdminControllerHelperTest extends \PHPUnit_Framework_TestCase
 
         $helper = new AdminHelper($pool);
 
-        $controller = new HelperController($twig, $request, $pool, $helper);
+        $controller = new HelperController($twig, $pool, $helper);
 
-        $response = $controller->getShortObjectDescriptionAction();
+        $response = $controller->getShortObjectDescriptionAction($request);
 
         $expected = '<a href="/ok/url" target="new">bar</a>';
         $this->assertEquals($expected, $response->getContent());
@@ -163,9 +163,9 @@ class AdminControllerHelperTest extends \PHPUnit_Framework_TestCase
 
         $helper = new AdminHelper($pool);
 
-        $controller = new HelperController($twig, $request, $pool, $helper);
+        $controller = new HelperController($twig, $pool, $helper);
 
-        $response = $controller->setObjectFieldValueAction();
+        $response = $controller->setObjectFieldValueAction($request);
 
         $this->assertEquals('{"status":"OK","content":"<foo \/>"}', $response->getContent() );
     }
@@ -212,8 +212,8 @@ class AdminControllerHelperTest extends \PHPUnit_Framework_TestCase
             $form
         )));
 
-        $controller = new HelperController($twig, $request, $pool, $helper);
-        $response = $controller->appendFormFieldElementAction();
+        $controller = new HelperController($twig, $pool, $helper);
+        $response = $controller->appendFormFieldElementAction($request);
 
         $this->isInstanceOf('Symfony\Component\HttpFoundation\Response', $response);
     }
@@ -262,8 +262,8 @@ class AdminControllerHelperTest extends \PHPUnit_Framework_TestCase
         $helper = $this->getMock('Sonata\AdminBundle\Admin\AdminHelper', array('getChildFormView'), array($pool));
         $helper->expects($this->once())->method('getChildFormView')->will($this->returnValue($formView));
 
-        $controller = new HelperController($twig, $request, $pool, $helper);
-        $response = $controller->retrieveFormFieldElementAction();
+        $controller = new HelperController($twig, $pool, $helper);
+        $response = $controller->retrieveFormFieldElementAction($request);
 
         $this->isInstanceOf('Symfony\Component\HttpFoundation\Response', $response);
     }