merged branch bschussek/issue2553 (PR #3319)
Commits
-------
6a45a41
[Form] Fixed Form::bindRequest() when used on a form without children
Discussion
----------
[Form] Fixed Form::bindRequest() when used on a form without children
Bug fix: yes
Feature addition: no
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: #2553
Todo: -
![Travis Build Status](https://secure.travis-ci.org/bschussek/symfony.png?branch=issue2553)
This commit is contained in:
commit
feb0dfd55e
@ -578,15 +578,22 @@ class Form implements \IteratorAggregate, FormInterface
|
|||||||
case 'DELETE':
|
case 'DELETE':
|
||||||
case 'PATCH':
|
case 'PATCH':
|
||||||
if ('' === $this->getName()) {
|
if ('' === $this->getName()) {
|
||||||
$data = array_replace_recursive(
|
// Form bound without name
|
||||||
$request->request->all(),
|
$params = $request->request->all();
|
||||||
$request->files->all()
|
$files = $request->files->all();
|
||||||
);
|
} elseif ($this->hasChildren()) {
|
||||||
|
// Form bound with name and children
|
||||||
|
$params = $request->request->get($this->getName(), array());
|
||||||
|
$files = $request->files->get($this->getName(), array());
|
||||||
} else {
|
} else {
|
||||||
$data = array_replace_recursive(
|
// Form bound with name, but without children
|
||||||
$request->request->get($this->getName(), array()),
|
$params = $request->request->get($this->getName(), null);
|
||||||
$request->files->get($this->getName(), array())
|
$files = $request->files->get($this->getName(), null);
|
||||||
);
|
}
|
||||||
|
if (is_array($params) && is_array($files)) {
|
||||||
|
$data = array_replace_recursive($params, $files);
|
||||||
|
} else {
|
||||||
|
$data = $params ?: $files;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'GET':
|
case 'GET':
|
||||||
|
@ -936,7 +936,6 @@ class FormTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$values = array(
|
$values = array(
|
||||||
'name' => 'Bernhard',
|
'name' => 'Bernhard',
|
||||||
'image' => array('filename' => 'foobar.png'),
|
|
||||||
'extra' => 'data',
|
'extra' => 'data',
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -969,6 +968,64 @@ class FormTest extends \PHPUnit_Framework_TestCase
|
|||||||
unlink($path);
|
unlink($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider requestMethodProvider
|
||||||
|
*/
|
||||||
|
public function testBindPostOrPutRequestWithSingleFieldForm($method)
|
||||||
|
{
|
||||||
|
$path = tempnam(sys_get_temp_dir(), 'sf2');
|
||||||
|
touch($path);
|
||||||
|
|
||||||
|
$files = array(
|
||||||
|
'image' => array(
|
||||||
|
'error' => UPLOAD_ERR_OK,
|
||||||
|
'name' => 'upload.png',
|
||||||
|
'size' => 123,
|
||||||
|
'tmp_name' => $path,
|
||||||
|
'type' => 'image/png',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
$request = new Request(array(), array(), array(), array(), $files, array(
|
||||||
|
'REQUEST_METHOD' => $method,
|
||||||
|
));
|
||||||
|
|
||||||
|
$form = $this->getBuilder('image')->getForm();
|
||||||
|
|
||||||
|
$form->bindRequest($request);
|
||||||
|
|
||||||
|
$file = new UploadedFile($path, 'upload.png', 'image/png', 123, UPLOAD_ERR_OK);
|
||||||
|
|
||||||
|
$this->assertEquals($file, $form->getData());
|
||||||
|
|
||||||
|
unlink($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider requestMethodProvider
|
||||||
|
*/
|
||||||
|
public function testBindPostOrPutRequestWithSingleFieldFormUploadedFile($method)
|
||||||
|
{
|
||||||
|
$path = tempnam(sys_get_temp_dir(), 'sf2');
|
||||||
|
touch($path);
|
||||||
|
|
||||||
|
$values = array(
|
||||||
|
'name' => 'Bernhard',
|
||||||
|
);
|
||||||
|
|
||||||
|
$request = new Request(array(), $values, array(), array(), array(), array(
|
||||||
|
'REQUEST_METHOD' => $method,
|
||||||
|
));
|
||||||
|
|
||||||
|
$form = $this->getBuilder('name')->getForm();
|
||||||
|
|
||||||
|
$form->bindRequest($request);
|
||||||
|
|
||||||
|
$this->assertEquals('Bernhard', $form->getData());
|
||||||
|
|
||||||
|
unlink($path);
|
||||||
|
}
|
||||||
|
|
||||||
public function testBindGetRequest()
|
public function testBindGetRequest()
|
||||||
{
|
{
|
||||||
$values = array(
|
$values = array(
|
||||||
|
Reference in New Issue
Block a user