diff --git a/README.md b/README.md index c6f7186..ed88b01 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,21 @@ Usage $builder->add('enabled', BooleanType::class); ``` -The form type use a data transformer which will transform the value to `true` (`1`, `'1'`, `true` or `'true'`) -or `false` (`0`, `'0'`, `false` or `'false'`). +By default, the form type use a data transformer which will transform the value to `true` (`1`, `'1'`, `true` and +`'true'`) or `false` (`0`, `'0'`, `false` and `'false'`). + +If you want to support more values, you can override the `true_values` and `false_values` form type options: + +```php +$builder + ->add('enabled', BooleanType::class, + array( + 'true_values' => array(1, '1', true, 'true', 'on', 'yes'), + 'false_values' => array(0, '0', false, 'false', 'off', 'no'), + ) + ) +; +``` > **Note:** The form type is not intended to be displayed on a browser: use the built-in `CheckboxType` form type > provided by Symfony instead. diff --git a/src/Form/DataTransformer/BooleanTypeToBooleanTransformer.php b/src/Form/DataTransformer/BooleanTypeToBooleanTransformer.php index 0d67d4e..02bfa46 100644 --- a/src/Form/DataTransformer/BooleanTypeToBooleanTransformer.php +++ b/src/Form/DataTransformer/BooleanTypeToBooleanTransformer.php @@ -2,7 +2,6 @@ namespace FSevestre\BooleanFormType\Form\DataTransformer; -use FSevestre\BooleanFormType\Form\Type\BooleanType; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Exception\TransformationFailedException; @@ -11,6 +10,15 @@ */ final class BooleanTypeToBooleanTransformer implements DataTransformerInterface { + private $trueValues; + private $falseValues; + + public function __construct(array $trueValues, array $falseValues) + { + $this->trueValues = $trueValues; + $this->falseValues = $falseValues; + } + public function transform($value) { if (null === $value) { @@ -30,9 +38,9 @@ public function reverseTransform($value) return false; // `false` and empty values are converted to `null` during form submission. } - if (in_array($value, BooleanType::$TRUE_VALUES, true)) { + if (in_array($value, $this->trueValues, true)) { return true; - } elseif (in_array($value, BooleanType::$FALSE_VALUES, true)) { + } elseif (in_array($value, $this->falseValues, true)) { return false; } diff --git a/src/Form/Type/BooleanType.php b/src/Form/Type/BooleanType.php index 33f45e9..db40f4d 100644 --- a/src/Form/Type/BooleanType.php +++ b/src/Form/Type/BooleanType.php @@ -12,18 +12,17 @@ */ final class BooleanType extends AbstractType { - public static $FALSE_VALUES = array(0, '0', false, 'false'); - public static $TRUE_VALUES = array(1, '1', true, 'true'); - public function buildForm(FormBuilderInterface $builder, array $options) { - $builder->addModelTransformer(new BooleanTypeToBooleanTransformer()); + $builder->addModelTransformer(new BooleanTypeToBooleanTransformer($options['true_values'], $options['false_values'])); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'compound' => false, + 'true_values' => array(1, '1', true, 'true'), + 'false_values' => array(0, '0', false, 'false'), )); } } diff --git a/tests/Form/DataTransformer/BooleanTypeToBooleanTransformerTest.php b/tests/Form/DataTransformer/BooleanTypeToBooleanTransformerTest.php index 651f3df..fa260d7 100644 --- a/tests/Form/DataTransformer/BooleanTypeToBooleanTransformerTest.php +++ b/tests/Form/DataTransformer/BooleanTypeToBooleanTransformerTest.php @@ -3,7 +3,6 @@ namespace FSevestre\BooleanFormTypeTest\Form\DataTransformer; use FSevestre\BooleanFormType\Form\DataTransformer\BooleanTypeToBooleanTransformer; -use FSevestre\BooleanFormType\Form\Type\BooleanType; /** * @author Florent SEVESTRE @@ -12,21 +11,21 @@ class BooleanTypeToBooleanTransformerTest extends \PHPUnit_Framework_TestCase { public function testTransformNull() { - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); static::assertFalse($transformer->transform(null)); } public function testTransformTrue() { - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); static::assertTrue($transformer->transform(true)); } public function testTransformFalse() { - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); static::assertFalse($transformer->transform(false)); } @@ -38,7 +37,7 @@ public function testTransformFailed($value) { $this->setExpectedException('Symfony\Component\Form\Exception\TransformationFailedException'); - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); $transformer->transform($value); } @@ -58,7 +57,7 @@ public function getTransformFailedData() public function testReverseTransformNull() { - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); static::assertFalse($transformer->reverseTransform(null)); } @@ -68,7 +67,7 @@ public function testReverseTransformNull() */ public function testReverseTransformTrue($value) { - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); static::assertTrue($transformer->reverseTransform($value)); } @@ -77,7 +76,7 @@ public function getReverseTransformTrueData() { return array_map(function($value) { return array($value); - }, BooleanType::$TRUE_VALUES); + }, array(1, '1', true, 'true')); } /** @@ -85,7 +84,7 @@ public function getReverseTransformTrueData() */ public function testReverseTransformFalse($value) { - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); static::assertFalse($transformer->reverseTransform($value)); } @@ -94,14 +93,14 @@ public function getReverseTransformFalseData() { return array_map(function($value) { return array($value); - }, BooleanType::$FALSE_VALUES); + }, array(0, '0', false, 'false')); } public function testReverseTransformFailed() { $this->setExpectedException('Symfony\Component\Form\Exception\TransformationFailedException'); - $transformer = new BooleanTypeToBooleanTransformer(); + $transformer = new BooleanTypeToBooleanTransformer(array(1, '1', true, 'true'), array(0, '0', false, 'false')); $transformer->transform(''); } } diff --git a/tests/Form/Type/BooleanTypeTest.php b/tests/Form/Type/BooleanTypeTest.php index cc20788..9b21e18 100644 --- a/tests/Form/Type/BooleanTypeTest.php +++ b/tests/Form/Type/BooleanTypeTest.php @@ -2,7 +2,6 @@ namespace FSevestre\BooleanFormTypeTest\Form\Type; -use FSevestre\BooleanFormType\Form\Type\BooleanType; use Symfony\Component\Form\Test\TypeTestCase; /** @@ -27,7 +26,7 @@ public function getFormTypeTrueData() { return array_map(function($value) { return array($value); - }, BooleanType::$TRUE_VALUES); + }, array(1, '1', true, 'true')); } /** @@ -48,7 +47,7 @@ public function getFormTypeFalseData() return array_merge( array_map(function($value) { return array($value); - }, BooleanType::$FALSE_VALUES), + }, array(0, '0', false, 'false')), array(array(null), array('')) ); }