minor #14883 [2.7] Improved exception message if custom implementation of OptionsResolverInterface is used (phansys)

This PR was merged into the 2.7 branch.

Discussion
----------

[2.7] Improved exception message if custom implementation of OptionsResolverInterface is used

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets |
| License       | MIT
| Doc PR        |

Improved exception message if custom implementation of ```OptionsResolverInterface``` is used within ```AbstractType::setDefaultOptions()``` or ```AbstractTypeExtension::setDefaultOptions()```.

Before:
```
Argument 1 passed to Symfony\Component\Form\AbstractType::configureOptions() must be an instance of Symfony\Component\OptionsResolver\OptionsResolver, instance of Symfony\Component\Form\Tests\Fixtures\CustomOptionsResolver given
```

After:
```
Argument 1 passed to Symfony\Component\Form\AbstractType::setDefaultOptions() must be an instance of Symfony\Component\OptionsResolver\OptionsResolver, instance of Symfony\Component\Form\Tests\Fixtures\CustomOptionsResolver given
```

Commits
-------

aa945d3 [2.7] Improved exception message if custom implementation of ```OptionsResolverInterface``` is used
This commit is contained in:
Fabien Potencier 2015-06-11 21:07:54 +02:00
commit 58fba34843
5 changed files with 93 additions and 0 deletions

View File

@ -45,6 +45,9 @@ abstract class AbstractType implements FormTypeInterface
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
if (!$resolver instanceof OptionsResolver) {
throw new \InvalidArgumentException(sprintf('Custom resolver %s must extend Symfony\Component\OptionsResolver\OptionsResolver', get_class($resolver)));
}
$this->configureOptions($resolver);
}

View File

@ -45,6 +45,9 @@ abstract class AbstractTypeExtension implements FormTypeExtensionInterface
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
if (!$resolver instanceof OptionsResolver) {
throw new \InvalidArgumentException(sprintf('Custom resolver %s must extend Symfony\Component\OptionsResolver\OptionsResolver', get_class($resolver)));
}
$this->configureOptions($resolver);
}

View File

@ -28,6 +28,17 @@ class AbstractExtensionTest extends \PHPUnit_Framework_TestCase
$loader = new ConcreteExtension();
$this->assertInstanceOf('Symfony\Component\Form\Tests\Fixtures\FooType', $loader->getType('foo'));
}
/**
* @expectedException \InvalidArgumentException
* @expectedExceptionMessage Custom resolver Symfony\Component\Form\Tests\Fixtures\CustomOptionsResolver must extend Symfony\Component\OptionsResolver\OptionsResolver
*/
public function testCustomOptionsResolver()
{
$extension = new Fixtures\FooTypeBarExtension();
$resolver = new Fixtures\CustomOptionsResolver();
$extension->setDefaultOptions($resolver);
}
}
class ConcreteExtension extends AbstractExtension

View File

@ -0,0 +1,65 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Form\Tests\Fixtures;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CustomOptionsResolver implements OptionsResolverInterface
{
public function setDefaults(array $defaultValues)
{
}
public function replaceDefaults(array $defaultValues)
{
}
public function setOptional(array $optionNames)
{
}
public function setRequired($optionNames)
{
}
public function setAllowedValues($allowedValues)
{
}
public function addAllowedValues($allowedValues)
{
}
public function setAllowedTypes($allowedTypes)
{
}
public function addAllowedTypes($allowedTypes)
{
}
public function setNormalizers(array $normalizers)
{
}
public function isKnown($option)
{
}
public function isRequired($option)
{
}
public function resolve(array $options = array())
{
}
}

View File

@ -1057,6 +1057,17 @@ class SimpleFormTest extends AbstractFormTest
$child->initialize();
}
/**
* @expectedException \InvalidArgumentException
* @expectedExceptionMessage Custom resolver Symfony\Component\Form\Tests\Fixtures\CustomOptionsResolver must extend Symfony\Component\OptionsResolver\OptionsResolver
*/
public function testCustomOptionsResolver()
{
$fooType = new Fixtures\FooType();
$resolver = new Fixtures\CustomOptionsResolver();
$fooType->setDefaultOptions($resolver);
}
protected function createForm()
{
return $this->getBuilder()->getForm();