[DomCrawler] fixed disabled fields in forms (they are available in the DOM, but their values are not submitted -- whereas before, they were simply removed from the DOM)

This commit is contained in:
Fabien Potencier 2011-08-23 11:21:48 +02:00
parent 04a549bf6e
commit 3380f2a039
3 changed files with 22 additions and 2 deletions

View File

@ -23,6 +23,7 @@ abstract class FormField
protected $value;
protected $document;
protected $xpath;
protected $disabled;
/**
* Constructor.
@ -86,6 +87,11 @@ abstract class FormField
return true;
}
public function isDisabled()
{
return $this->node->hasAttribute('disabled');
}
/**
* Initializes the form field.
*/

View File

@ -83,6 +83,10 @@ class Form extends Link implements \ArrayAccess
{
$values = array();
foreach ($this->fields as $name => $field) {
if ($field->isDisabled()) {
continue;
}
if (!$field instanceof Field\FileFormField && $field->hasValue()) {
$values[$name] = $field->getValue();
}
@ -106,6 +110,10 @@ class Form extends Link implements \ArrayAccess
$files = array();
foreach ($this->fields as $name => $field) {
if ($field->isDisabled()) {
continue;
}
if ($field instanceof Field\FileFormField) {
$files[$name] = $field->getValue();
}

View File

@ -73,10 +73,10 @@ class FormTest extends \PHPUnit_Framework_TestCase
array(),
),
array(
'does not take into account disabled input fields',
'takes into account disabled input fields',
'<input type="text" name="foo" value="foo" disabled="disabled" />
<input type="submit" />',
array(),
array('foo' => array('Symfony\\Component\\DomCrawler\\Field\\InputFormField', 'foo')),
),
array(
'appends the submitted button value',
@ -201,6 +201,9 @@ class FormTest extends \PHPUnit_Framework_TestCase
$form = $this->createForm('<form><input type="file" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
$this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include file input fields');
$form = $this->createForm('<form><input type="text" name="foo" value="foo" disabled="disabled" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
$this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include disabled fields');
}
public function testSetValues()
@ -223,6 +226,9 @@ class FormTest extends \PHPUnit_Framework_TestCase
$form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
$this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields');
$form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" disabled="disabled" /><input type="submit" /></form>');
$this->assertEquals(array(), $form->getFiles(), '->getFiles() does not include disabled file fields');
}
public function testGetPhpFiles()