[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
=========
3.0.0
-----
* The precedence of parameters returned from `Request::get()` changed from "GET, PATH, BODY" to "PATH, GET, BODY"
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
*
* 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).
* Order of precedence: PATH (routing placeholders or custom attributes), GET, BODY
*
* @param string $key the key
* @param mixed $default the default value
@ -721,11 +715,11 @@ class Request
*/
public function get($key, $default = null)
{
if ($this !== $result = $this->query->get($key, $this)) {
if ($this !== $result = $this->attributes->get($key, $this)) {
return $result;
}
if ($this !== $result = $this->attributes->get($key, $this)) {
if ($this !== $result = $this->query->get($key, $this)) {
return $result;
}

View File

@ -1221,6 +1221,25 @@ class RequestTest extends \PHPUnit_Framework_TestCase
$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()
{
$request = new Request();