[DomCrawler] Fix conversion to int on GetPhpFiles
This commit is contained in:
parent
47871c995f
commit
122da5add5
@ -172,6 +172,18 @@ class Form extends Link implements \ArrayAccess
|
|||||||
if (!empty($qs)) {
|
if (!empty($qs)) {
|
||||||
parse_str($qs, $expandedValue);
|
parse_str($qs, $expandedValue);
|
||||||
$varName = substr($name, 0, strlen(key($expandedValue)));
|
$varName = substr($name, 0, strlen(key($expandedValue)));
|
||||||
|
|
||||||
|
array_walk_recursive(
|
||||||
|
$expandedValue,
|
||||||
|
function (&$value, $key) {
|
||||||
|
if (ctype_digit($value) && ('size' === $key || 'error' === $key)) {
|
||||||
|
$value = (int) $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
reset($expandedValue);
|
||||||
|
|
||||||
$values = array_replace_recursive($values, array($varName => current($expandedValue)));
|
$values = array_replace_recursive($values, array($varName => current($expandedValue)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -456,6 +456,15 @@ class FormTest extends TestCase
|
|||||||
|
|
||||||
$form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar][ba.z]" /><input type="file" name="f.o o[bar][]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
|
$form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar][ba.z]" /><input type="file" name="f.o o[bar][]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
|
||||||
$this->assertEquals(array('f.o o' => array('bar' => array('ba.z' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0), array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names recursively');
|
$this->assertEquals(array('f.o o' => array('bar' => array('ba.z' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0), array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names recursively');
|
||||||
|
|
||||||
|
$form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
|
||||||
|
$files = $form->getPhpFiles();
|
||||||
|
|
||||||
|
$this->assertSame(0, $files['foo']['bar']['size'], '->getPhpFiles() converts size to int');
|
||||||
|
$this->assertSame(4, $files['foo']['bar']['error'], '->getPhpFiles() converts error to int');
|
||||||
|
|
||||||
|
$form = $this->createForm('<form method="post"><input type="file" name="size[error]" /><input type="text" name="error" value="error" /><input type="submit" /></form>');
|
||||||
|
$this->assertEquals(array('size' => array('error' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() int conversion does not collide with file names');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user