From c998888fe71248512b40c3d6213c019619a4a33e Mon Sep 17 00:00:00 2001 From: Simon Males <sime@sime.net.au> Date: Fri, 20 Sep 2013 18:20:47 +0800 Subject: [PATCH] Do not assume CONTENT_TYPE is available. In some server environments notably the CLI server, _SERVER['CONTENT_TYPE'] is not available. In these cases, fall back to the HTTP_CONTENT_TYPE header. Refs #GH-1661 --- .../Controller/Component/RequestHandlerComponent.php | 3 +++ .../Component/RequestHandlerComponentTest.php | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/Cake/Controller/Component/RequestHandlerComponent.php b/lib/Cake/Controller/Component/RequestHandlerComponent.php index fd90a6d9e..da8c2243f 100644 --- a/lib/Cake/Controller/Component/RequestHandlerComponent.php +++ b/lib/Cake/Controller/Component/RequestHandlerComponent.php @@ -518,6 +518,9 @@ class RequestHandlerComponent extends Component { } list($contentType) = explode(';', env('CONTENT_TYPE')); + if ($contentType === '') { + list($contentType) = explode(';', CakeRequest::header('CONTENT_TYPE')); + } if (!$type) { return $this->mapType($contentType); } diff --git a/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php b/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php index 63ced76f3..8ceb14849 100644 --- a/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php +++ b/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php @@ -603,6 +603,16 @@ class RequestHandlerComponentTest extends CakeTestCase { $result = $this->RequestHandler->requestedWith(array('rss', 'atom')); $this->assertFalse($result); + $_SERVER['REQUEST_METHOD'] = 'POST'; + unset($_SERVER['CONTENT_TYPE']); + $_SERVER['HTTP_CONTENT_TYPE'] = 'application/json'; + + $result = $this->RequestHandler->requestedWith(array('json', 'xml')); + $this->assertEquals('json', $result); + + $result = $this->RequestHandler->requestedWith(array('rss', 'atom')); + $this->assertFalse($result); + $_SERVER['HTTP_ACCEPT'] = 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/*'; $this->assertTrue($this->RequestHandler->isXml()); $this->assertFalse($this->RequestHandler->isAtom());