[Form] Fixed Form::bindRequest() when used on a form without children
This commit is contained in:
parent
11e3516583
commit
6a45a415a1
@ -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