merged branch li0n12/crawler_button (PR #5699)

This PR was merged into the 2.0 branch.

Commits
-------

b439d13  fixed DomCrwaler/Form to handle <button> when submitted

Discussion
----------

[DomCrawler] fixed Form to handle <button> when submitted

Bug fix: yes
Feature addition: no
Backwards compatibility break: no
Symfony2 tests pass: yes
License of the code: MIT

Issue appears when submitting form with <button> form element.
Name-value of this button wasn`t passed to the request.
This commit is contained in:
Fabien Potencier 2012-10-09 09:13:22 +02:00
commit f19e4b51d2
3 changed files with 10 additions and 4 deletions

View File

@ -30,8 +30,8 @@ class InputFormField extends FormField
*/
protected function initialize()
{
if ('input' != $this->node->nodeName) {
throw new \LogicException(sprintf('An InputFormField can only be created from an input tag (%s given).', $this->node->nodeName));
if ('input' != $this->node->nodeName && 'button' != $this->node->nodeName) {
throw new \LogicException(sprintf('An InputFormField can only be created from an input or button tag (%s given).', $this->node->nodeName));
}
if ('checkbox' == $this->node->getAttribute('type')) {

View File

@ -293,7 +293,7 @@ class Form extends Link implements \ArrayAccess
$root->appendChild($button);
$xpath = new \DOMXPath($document);
foreach ($xpath->query('descendant::input | descendant::textarea | descendant::select', $root) as $node) {
foreach ($xpath->query('descendant::input | descendant::button | descendant::textarea | descendant::select', $root) as $node) {
if (!$node->hasAttribute('name')) {
continue;
}

View File

@ -83,6 +83,11 @@ class FormTest extends \PHPUnit_Framework_TestCase
'<input type="submit" name="bar" value="bar" />',
array('bar' => array('Symfony\\Component\\DomCrawler\\Field\\InputFormField', 'bar')),
),
array(
'appends the submitted button value for Button element',
'<button type="submit" name="bar" value="bar">Bar</button>',
array('bar' => array('Symfony\\Component\\DomCrawler\\Field\\InputFormField', 'bar')),
),
array(
'appends the submitted button value but not other submit buttons',
'<input type="submit" name="bar" value="bar" />
@ -404,7 +409,8 @@ class FormTest extends \PHPUnit_Framework_TestCase
$dom = new \DOMDocument();
$dom->loadHTML('<html>'.$form.'</html>');
$nodes = $dom->getElementsByTagName('input');
$xPath = new \DOMXPath($dom);
$nodes = $xPath->query('//input | //button');
if (null === $currentUri) {
$currentUri = 'http://example.com/';