[Form] Fixed: ChoiceFields never validated

This commit is contained in:
Bernhard Schussek 2011-02-04 10:12:11 +01:00 committed by Fabien Potencier
parent 6ed7dc1e5a
commit 2276b98fc1
2 changed files with 37 additions and 17 deletions

View File

@ -855,28 +855,29 @@ class Form extends Field implements \IteratorAggregate, FormInterface
*/
public function validateData(ExecutionContext $context)
{
$groups = $this->getValidationGroups();
$propertyPath = $context->getPropertyPath();
$graphWalker = $context->getGraphWalker();
if (is_object($this->getData()) || is_array($this->getData())) {
$groups = $this->getValidationGroups();
$propertyPath = $context->getPropertyPath();
$graphWalker = $context->getGraphWalker();
if (null === $groups) {
$groups = array(null);
}
if (null === $groups) {
$groups = array(null);
}
// The Execute constraint is called on class level, so we need to
// set the property manually
$context->setCurrentProperty('data');
// The Execute constraint is called on class level, so we need to
// set the property manually
$context->setCurrentProperty('data');
// Adjust the property path accordingly
if (!empty($propertyPath)) {
$propertyPath .= '.';
}
// Adjust the property path accordingly
if (!empty($propertyPath)) {
$propertyPath .= '.';
}
$propertyPath .= 'data';
$propertyPath .= 'data';
foreach ($groups as $group) {
// Don't use potential overridden versions of getData()!
$graphWalker->walkReference(Form::getData(), $group, $propertyPath, true);
foreach ($groups as $group) {
$graphWalker->walkReference($this->getData(), $group, $propertyPath, true);
}
}
}

View File

@ -1111,6 +1111,25 @@ class FormTest extends \PHPUnit_Framework_TestCase
$form->validateData($context);
}
public function testValidateDataDoesNotWalkScalars()
{
$graphWalker = $this->createMockGraphWalker();
$metadataFactory = $this->createMockMetadataFactory();
$context = new ExecutionContext('Root', $graphWalker, $metadataFactory);
$valueTransformer = $this->createMockTransformer();
$form = new Form('author', array('value_transformer' => $valueTransformer));
$graphWalker->expects($this->never())
->method('walkReference');
$valueTransformer->expects($this->atLeastOnce())
->method('reverseTransform')
->will($this->returnValue('foobar'));
$form->submit(array('foo' => 'bar')); // reverse transformed to "foobar"
$form->validateData($context);
}
/**
* Create a group containing two fields, "visibleField" and "hiddenField"
*