diff --git a/forms/ListboxField.php b/forms/ListboxField.php index 43e0b4e37..7b835cb04 100644 --- a/forms/ListboxField.php +++ b/forms/ListboxField.php @@ -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) )); } diff --git a/tests/forms/ListboxFieldTest.php b/tests/forms/ListboxFieldTest.php index b73843722..3c9d18705 100644 --- a/tests/forms/ListboxFieldTest.php +++ b/tests/forms/ListboxFieldTest.php @@ -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);