diff --git a/src/Symfony/Component/OptionsResolver/OptionsResolver.php b/src/Symfony/Component/OptionsResolver/OptionsResolver.php index 20ec7af011..e048f67446 100644 --- a/src/Symfony/Component/OptionsResolver/OptionsResolver.php +++ b/src/Symfony/Component/OptionsResolver/OptionsResolver.php @@ -312,6 +312,10 @@ class OptionsResolver implements OptionsResolverInterface private function validateOptionTypes(array $options) { foreach ($this->allowedTypes as $option => $allowedTypes) { + if (!array_key_exists($option, $options)) { + continue; + } + $value = $options[$option]; $allowedTypes = (array) $allowedTypes; diff --git a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php index d90fd72b50..d6e02b0de1 100644 --- a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php +++ b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php @@ -381,6 +381,27 @@ class OptionsResolverTest extends \PHPUnit_Framework_TestCase ), $this->resolver->resolve($options)); } + public function testResolveSucceedsIfOptionalWithTypeAndWithoutValue() + { + $this->resolver->setOptional(array( + 'one', + 'two', + )); + + $this->resolver->setAllowedTypes(array( + 'one' => 'string', + 'two' => 'int', + )); + + $options = array( + 'two' => 1, + ); + + $this->assertEquals(array( + 'two' => 1, + ), $this->resolver->resolve($options)); + } + /** * @expectedException Symfony\Component\OptionsResolver\Exception\InvalidOptionsException */