[Form] Fixed: Checkboxes in an expanded choice field never have the 'required' HTML5 attribute. Closes http://trac.symfony-project.org/ticket/9588

This commit is contained in:
Bernhard Schussek 2011-04-15 16:10:04 +02:00
parent a05575bba1
commit 30922d9375
3 changed files with 49 additions and 3 deletions

View File

@ -44,6 +44,9 @@ class ChoiceType extends AbstractType
$builder->add((string)$choice, 'checkbox', array(
'value' => $choice,
'label' => $value,
// The user can check 0 or more checkboxes. If required
// is true, he is required to check all of them.
'required' => false,
));
} else {
$builder->add((string)$choice, 'radio', array(

View File

@ -412,16 +412,17 @@ abstract class AbstractLayoutTest extends \PHPUnit_Framework_TestCase
'data' => array('&a', '&c'),
'multiple' => true,
'expanded' => true,
'required' => true,
));
$this->assertWidgetMatchesXpath($form->createView(), array(),
'/div
[
./input[@type="checkbox"][@name="na&me[&a]"][@id="na&me_&a"][@checked]
./input[@type="checkbox"][@name="na&me[&a]"][@id="na&me_&a"][@checked][not(@required)]
/following-sibling::label[@for="na&me_&a"][.="[trans]Choice&A[/trans]"]
/following-sibling::input[@type="checkbox"][@name="na&me[&b]"][@id="na&me_&b"][not(@checked)]
/following-sibling::input[@type="checkbox"][@name="na&me[&b]"][@id="na&me_&b"][not(@checked)][not(@required)]
/following-sibling::label[@for="na&me_&b"][.="[trans]Choice&B[/trans]"]
/following-sibling::input[@type="checkbox"][@name="na&me[&c]"][@id="na&me_&c"][@checked]
/following-sibling::input[@type="checkbox"][@name="na&me[&c]"][@id="na&me_&c"][@checked][not(@required)]
/following-sibling::label[@for="na&me_&c"][.="[trans]Choice&C[/trans]"]
]
[count(./input)=3]

View File

@ -56,6 +56,48 @@ class ChoiceTypeTest extends TestCase
));
}
public function testExpandedCheckboxesAreNeverRequired()
{
$form = $this->factory->create('choice', 'name', array(
'multiple' => true,
'expanded' => true,
'required' => true,
'choices' => $this->choices,
));
foreach ($form as $child) {
$this->assertFalse($child->isRequired());
}
}
public function testExpandedRadiosAreRequiredIfChoiceFieldIsRequired()
{
$form = $this->factory->create('choice', 'name', array(
'multiple' => false,
'expanded' => true,
'required' => true,
'choices' => $this->choices,
));
foreach ($form as $child) {
$this->assertTrue($child->isRequired());
}
}
public function testExpandedRadiosAreNotRequiredIfChoiceFieldIsNotRequired()
{
$form = $this->factory->create('choice', 'name', array(
'multiple' => false,
'expanded' => true,
'required' => false,
'choices' => $this->choices,
));
foreach ($form as $child) {
$this->assertFalse($child->isRequired());
}
}
public function testBindSingleNonExpanded()
{
$form = $this->factory->create('choice', 'name', array(