MINOR Removed overzealous value validation in ListboxField, should silently ignore unknown values (lacking better referential integrity measures in the underlying model layer)

This commit is contained in:
Ingo Schommer 2012-01-19 11:33:49 +01:00
parent 82ef236879
commit cb74dbccfc
2 changed files with 3 additions and 19 deletions

View File

@ -162,18 +162,14 @@ class ListboxField extends DropdownField {
throw new InvalidArgumentException('No associative arrays allowed multiple=true');
}
if($diff = array_diff($parts, array_keys($this->source))) {
throw new InvalidArgumentException(sprintf(
'Invalid keys "%s" in value array for multiple=true',
Convert::raw2xml(implode(',', $diff))
));
}
// Doesn't check against unknown values in order to allow for less rigid data handling.
// They're silently ignored and overwritten the next time the field is saved.
parent::setValue($parts);
} else {
if(!in_array($val, array_keys($this->source))) {
throw new InvalidArgumentException(sprintf(
'Invalid value "%s" for multiple=true',
'Invalid value "%s" for multiple=false',
Convert::raw2xml($val)
));
}

View File

@ -90,18 +90,6 @@ class ListboxFieldTest extends SapphireTest {
$field->setValue('invalid');
}
/**
* @expectedException InvalidArgumentException
*/
function testSetValueFailsOnInvalidArrayKeyIfChoiceInvalidAndMultipleIsOn() {
$choices = array('a' => 'a value', 'b' => 'b value','c' => 'c value');
$field = new ListboxField('Choices', 'Choices', $choices);
$field->multiple = true;
$obj = new ListboxFieldTest_DataObject();
$field->setValue(array('a', 'invalid'));
}
function testFieldRenderingMultipleOff() {
$choices = array('a' => 'a value', 'b' => 'b value','c' => 'c value');
$field = new ListboxField('Choices', 'Choices', $choices);