Browse Source

Fixed RequestHandler overwriting renderAs response

Jeremy Harris 8 years ago
parent
commit
caec5fa1c5

+ 1 - 0
src/Controller/Component/RequestHandlerComponent.php

@@ -331,6 +331,7 @@ class RequestHandlerComponent extends Component
 
         if ($this->ext && $isRecognized) {
             $this->renderAs($controller, $this->ext);
+            $response = $controller->response;
         } else {
             $response = $response->withCharset(Configure::read('App.encoding'));
         }

+ 20 - 0
tests/TestCase/Controller/Component/RequestHandlerComponentTest.php

@@ -46,6 +46,11 @@ class RequestHandlerComponentTest extends TestCase
     public $RequestHandler;
 
     /**
+     * @var ServerRequest
+     */
+    public $request;
+
+    /**
      * Backup of $_SERVER
      *
      * @var array
@@ -1340,4 +1345,19 @@ class RequestHandlerComponentTest extends TestCase
         $this->RequestHandler->beforeRender($event);
         $this->assertEquals('text/plain', $this->Controller->response->getType());
     }
+
+    /**
+     * tests beforeRender automatically uses renderAs when a supported extension is found
+     *
+     * @return void
+     */
+    public function testBeforeRenderAutoRenderAs()
+    {
+        $this->Controller->setRequest($this->request->withParam('_ext', 'csv'));
+        $this->RequestHandler->startup(new Event('Controller.startup', $this->Controller));
+
+        $event = new Event('Controller.beforeRender', $this->Controller);
+        $this->RequestHandler->beforeRender($event);
+        $this->assertEquals('text/csv', $this->Controller->response->getType());
+    }
 }