src/Form/Type/EnumChoiceType.php line 44

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Type;
  4. use App\DBAL\Types\AbstractEnumObjectType;
  5. use App\Model\Enum\AbstractEnumObject;
  6. use Symfony\Component\Form\AbstractType;
  7. use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader;
  8. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\OptionsResolver\Options;
  11. use Symfony\Component\OptionsResolver\OptionsResolver;
  12. class EnumChoiceType extends AbstractType
  13. {
  14.     public function buildForm(FormBuilderInterface $builder, array $options)
  15.     {
  16.     }
  17.     public function configureOptions(OptionsResolver $resolver)
  18.     {
  19.         $resolver->setRequired('enum_object_class');
  20.         $resolver->setAllowedTypes('enum_object_class''string');
  21.         $resolver->setDefault('choice_label', function (?AbstractEnumObject $choice) {
  22.             return $choice $choice->readable() : '';
  23.         });
  24.         $resolver->setDefault('choice_value', function (?AbstractEnumObject $choice) {
  25.             return $choice $choice->valueOf() : '';
  26.         });
  27.         $resolver->setDefault('choice_loader', function (Options $options) {
  28.             $enumTypeClass $options['enum_object_class'];
  29.             if (!is_subclass_of($enumTypeClassAbstractEnumObject::class)) {
  30.                 throw new \LogicException('enum type class must be sub class of '.AbstractEnumObjectType::class);
  31.             }
  32.             if ($options['choices']) {
  33.                 $choices $options['choices'];
  34.             } else {
  35.                 $choices $enumTypeClass::getInstances();
  36.             }
  37.             return new CallbackChoiceLoader(function () use ($choices) {
  38.                 return $choices;
  39.             });
  40.         });
  41.     }
  42.     public function getParent()
  43.     {
  44.         return ChoiceType::class;
  45.     }
  46. }