[HttpFoundation] change precedence of parameters in Request::get

This commit is contained in:
Tobias Schultze 2015-10-02 15:56:23 +02:00
parent 7e3c4a6afd
commit e8d6764e32
3 changed files with 31 additions and 13 deletions

View File

@ -1,6 +1,11 @@
CHANGELOG CHANGELOG
========= =========
3.0.0
-----
* The precedence of parameters returned from `Request::get()` changed from "GET, PATH, BODY" to "PATH, GET, BODY"
2.8.0 2.8.0
----- -----

View File

@ -700,19 +700,13 @@ class Request
} }
/** /**
* Gets a "parameter" value. * Gets a "parameter" value from any bag.
* *
* This method is mainly useful for libraries that want to provide some flexibility. * This method is mainly useful for libraries that want to provide some flexibility. If you don't need the
* flexibility in controllers, it is better to explicitly get request parameters from the appropriate
* public property instead (attributes, query, request).
* *
* Order of precedence: GET, PATH, POST * Order of precedence: PATH (routing placeholders or custom attributes), GET, BODY
*
* Avoid using this method in controllers:
*
* * slow
* * prefer to get from a "named" source
*
* It is better to explicitly get request parameters from the appropriate
* public property instead (query, attributes, request).
* *
* @param string $key the key * @param string $key the key
* @param mixed $default the default value * @param mixed $default the default value
@ -721,11 +715,11 @@ class Request
*/ */
public function get($key, $default = null) public function get($key, $default = null)
{ {
if ($this !== $result = $this->query->get($key, $this)) { if ($this !== $result = $this->attributes->get($key, $this)) {
return $result; return $result;
} }
if ($this !== $result = $this->attributes->get($key, $this)) { if ($this !== $result = $this->query->get($key, $this)) {
return $result; return $result;
} }

View File

@ -1221,6 +1221,25 @@ class RequestTest extends \PHPUnit_Framework_TestCase
$this->assertEquals('/path%20test/info', $request->getPathInfo()); $this->assertEquals('/path%20test/info', $request->getPathInfo());
} }
public function testGetParameterPrecedence()
{
$request = new Request();
$request->attributes->set('foo', 'attr');
$request->query->set('foo', 'query');
$request->request->set('foo', 'body');
$this->assertSame('attr', $request->get('foo'));
$request->attributes->remove('foo');
$this->assertSame('query', $request->get('foo'));
$request->query->remove('foo');
$this->assertSame('body', $request->get('foo'));
$request->request->remove('foo');
$this->assertNull($request->get('foo'));
}
public function testGetPreferredLanguage() public function testGetPreferredLanguage()
{ {
$request = new Request(); $request = new Request();