diff --git a/src/Symfony/Component/OptionsResolver/OptionsResolver.php b/src/Symfony/Component/OptionsResolver/OptionsResolver.php index f5b84f05b4d5c..95a492de94bb8 100644 --- a/src/Symfony/Component/OptionsResolver/OptionsResolver.php +++ b/src/Symfony/Component/OptionsResolver/OptionsResolver.php @@ -883,7 +883,7 @@ private function verifyTypes($type, $value, array &$invalidTypes) $invalidValues = array_filter( // Filter out valid values, keeping invalid values in the resulting array $value, function ($value) use ($type) { - return (function_exists($isFunction = 'is_'.$type) && !$isFunction($value)) || !$value instanceof $type; + return !self::isValueValidType($type, $value); } ); @@ -896,7 +896,7 @@ function ($value) use ($type) { return false; } - if ((function_exists($isFunction = 'is_'.$type) && $isFunction($value)) || $value instanceof $type) { + if (self::isValueValidType($type, $value)) { return true; } @@ -1073,4 +1073,9 @@ private function formatValues(array $values) return implode(', ', $values); } + + private static function isValueValidType($type, $value) + { + return (function_exists($isFunction = 'is_'.$type) && $isFunction($value)) || $value instanceof $type; + } } diff --git a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php index fb15b1843b809..440af8b5787e6 100644 --- a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php +++ b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php @@ -486,6 +486,15 @@ public function testSetAllowedTypesFailsIfUnknownOption() $this->resolver->setAllowedTypes('foo', 'string'); } + public function testResolveTypedArray() + { + $this->resolver->setDefined('foo'); + $this->resolver->setAllowedTypes('foo', 'string[]'); + $options = $this->resolver->resolve(array('foo' => array('bar', 'baz'))); + + $this->assertSame(array('foo' => array('bar', 'baz')), $options); + } + /** * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException */