From e8672740c75600835778150df7d467503b84fe6b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 8 Dec 2010 07:24:37 +0100 Subject: [PATCH] [HttpFoundation] allowed any HTTP method for a Request --- .../Component/HttpFoundation/Request.php | 24 ++++--------------- .../Component/HttpFoundation/RequestTest.php | 23 +++++++++++++++++- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index b457a5938ce6..54857b35ab6b 100755 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -491,7 +491,7 @@ public function getHost() public function setMethod($method) { $this->method = null; - $this->server->set('REQUEST_METHOD', 'GET'); + $this->server->set('REQUEST_METHOD', $method); } /** @@ -502,25 +502,9 @@ public function setMethod($method) public function getMethod() { if (null === $this->method) { - switch ($this->server->get('REQUEST_METHOD', 'GET')) { - case 'POST': - $this->method = strtoupper($this->request->get('_method', 'POST')); - break; - - case 'PUT': - $this->method = 'PUT'; - break; - - case 'DELETE': - $this->method = 'DELETE'; - break; - - case 'HEAD': - $this->method = 'HEAD'; - break; - - default: - $this->method = 'GET'; + $this->method = strtoupper($this->server->get('REQUEST_METHOD', 'GET')); + if ('POST' === $this->method) { + $this->method = strtoupper($this->request->get('_method', 'POST')); } } diff --git a/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php b/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php index d3e580db7293..f6119daa4698 100644 --- a/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php +++ b/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php @@ -148,11 +148,32 @@ public function testGetHost() $request->initialize(null, null, null, null, null, array('SERVER_NAME' => 'www.exemple.com', 'HTTP_X_FORWARDED_HOST' => 'www.forward.com')); $this->assertEquals('www.forward.com', $request->getHost(), '->getHost() value from X_FORWARDED_HOST has priority over SERVER_NAME '); - $request->initialize(null, null, null, null, null, array('SERVER_NAME' => 'www.exemple.com', 'HTTP_HOST' => 'www.host.com')); $this->assertEquals('www.host.com', $request->getHost(), '->getHost() value from Host header has priority over SERVER_NAME '); + } + + /** + * @covers Symfony\Component\HttpFoundation\Request::setMethod + * @covers Symfony\Component\HttpFoundation\Request::getMethod + */ + public function testGetSetMethod() + { + $request = new Request(); + + $this->assertEquals('GET', $request->getMethod(), '->getMethod() returns GET if no method is defined'); + + $request->setMethod('get'); + $this->assertEquals('GET', $request->getMethod(), '->getMethod() returns an uppercased string'); + + $request->setMethod('PURGE'); + $this->assertEquals('PURGE', $request->getMethod(), '->getMethod() returns the method even if it is not a standard one'); + $request->setMethod('POST'); + $this->assertEquals('POST', $request->getMethod(), '->getMethod() returns the method POST if no _method is defined'); + $request->setMethod('POST'); + $request->request->set('_method', 'purge'); + $this->assertEquals('PURGE', $request->getMethod(), '->getMethod() returns the method from _method if defined and POST'); } public function testInitializeConvertsUploadedFiles()