Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a960ab8

Browse files
committed
[DomCrawler] Fixed incorrect value name conversion in getPhpValues() and getPhpFiles()
1 parent c11c588 commit a960ab8

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/Symfony/Component/DomCrawler/Form.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,13 @@ public function getFiles()
143143
*/
144144
public function getPhpValues()
145145
{
146-
$qs = http_build_query($this->getValues(), '', '&');
147-
parse_str($qs, $values);
146+
$values = array();
147+
foreach ($this->getValues() as $name => $value) {
148+
$qs = http_build_query(array($name => $value), '', '&');
149+
parse_str($qs, $expandedValue);
150+
$varName = substr($name, 0, strlen(key($expandedValue)));
151+
$values = array_replace_recursive($values, array($varName => current($expandedValue)));
152+
}
148153

149154
return $values;
150155
}
@@ -161,8 +166,13 @@ public function getPhpValues()
161166
*/
162167
public function getPhpFiles()
163168
{
164-
$qs = http_build_query($this->getFiles(), '', '&');
165-
parse_str($qs, $values);
169+
$values = array();
170+
foreach ($this->getFiles() as $name => $value) {
171+
$qs = http_build_query(array($name => $value), '', '&');
172+
parse_str($qs, $expandedValue);
173+
$varName = substr($name, 0, strlen(key($expandedValue)));
174+
$values = array_replace_recursive($values, array($varName => current($expandedValue)));
175+
}
166176

167177
return $values;
168178
}

src/Symfony/Component/DomCrawler/Tests/FormTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ public function testGetPhpValues()
391391
{
392392
$form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
393393
$this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), '->getPhpValues() converts keys with [] to arrays');
394+
395+
$form = $this->createForm('<form><input type="text" name="fo.o[ba.r]" value="foo" /><input type="text" name="ba r" value="bar" /><input type="submit" /></form>');
396+
$this->assertEquals(array('fo.o' => array('ba.r' => 'foo'), 'ba r' => 'bar'), $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names');
394397
}
395398

396399
public function testGetFiles()
@@ -418,6 +421,9 @@ public function testGetPhpFiles()
418421
{
419422
$form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
420423
$this->assertEquals(array('foo' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() converts keys with [] to arrays');
424+
425+
$form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
426+
$this->assertEquals(array('f.o o' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names');
421427
}
422428

423429
/**

0 commit comments

Comments
 (0)