vendor/sylius/resource-bundle/src/Bundle/Form/Type/ResourceAutocompleteChoiceType.php line 38

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Sylius package.
  4.  *
  5.  * (c) Paweł Jędrzejewski
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace Sylius\Bundle\ResourceBundle\Form\Type;
  12. use Sylius\Bundle\ResourceBundle\Form\DataTransformer\CollectionToStringTransformer;
  13. use Sylius\Bundle\ResourceBundle\Form\DataTransformer\RecursiveTransformer;
  14. use Sylius\Bundle\ResourceBundle\Form\DataTransformer\ResourceToIdentifierTransformer;
  15. use Sylius\Component\Registry\ServiceRegistryInterface;
  16. use Symfony\Component\Form\AbstractType;
  17. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  18. use Symfony\Component\Form\FormBuilderInterface;
  19. use Symfony\Component\Form\FormInterface;
  20. use Symfony\Component\Form\FormView;
  21. use Symfony\Component\OptionsResolver\Options;
  22. use Symfony\Component\OptionsResolver\OptionsResolver;
  23. class ResourceAutocompleteChoiceType extends AbstractType
  24. {
  25.     /** @var ServiceRegistryInterface */
  26.     protected $resourceRepositoryRegistry;
  27.     public function __construct(ServiceRegistryInterface $resourceRepositoryRegistry)
  28.     {
  29.         $this->resourceRepositoryRegistry $resourceRepositoryRegistry;
  30.     }
  31.     public function buildForm(FormBuilderInterface $builder, array $options): void
  32.     {
  33.         if (!$options['multiple']) {
  34.             $builder->addModelTransformer(
  35.                 new ResourceToIdentifierTransformer(
  36.                     $options['repository'],
  37.                     $options['choice_value']
  38.                 )
  39.             );
  40.         }
  41.         if ($options['multiple']) {
  42.             $builder
  43.                 ->addModelTransformer(
  44.                     new RecursiveTransformer(
  45.                         new ResourceToIdentifierTransformer(
  46.                             $options['repository'],
  47.                             $options['choice_value']
  48.                         )
  49.                     )
  50.                 )
  51.                 ->addViewTransformer(new CollectionToStringTransformer(','))
  52.             ;
  53.         }
  54.     }
  55.     /**
  56.      * @psalm-suppress MissingPropertyType
  57.      */
  58.     public function buildView(FormView $viewFormInterface $form, array $options): void
  59.     {
  60.         $view->vars['multiple'] = $options['multiple'];
  61.         $view->vars['choice_name'] = $options['choice_name'];
  62.         $view->vars['choice_value'] = $options['choice_value'];
  63.         $view->vars['placeholder'] = $options['placeholder'];
  64.     }
  65.     public function configureOptions(OptionsResolver $resolver): void
  66.     {
  67.         $resolver
  68.             ->setRequired([
  69.                 'resource',
  70.                 'choice_name',
  71.                 'choice_value',
  72.             ])
  73.             ->setDefaults([
  74.                 'multiple' => false,
  75.                 'error_bubbling' => false,
  76.                 'placeholder' => '',
  77.                 'repository' => function (Options $options) {
  78.                     return $this->resourceRepositoryRegistry->get($options['resource']);
  79.                 },
  80.             ])
  81.             ->setAllowedTypes('resource', ['string'])
  82.             ->setAllowedTypes('multiple', ['bool'])
  83.             ->setAllowedTypes('choice_name', ['string'])
  84.             ->setAllowedTypes('choice_value', ['string'])
  85.             ->setAllowedTypes('placeholder', ['string'])
  86.         ;
  87.     }
  88.     public function getParent(): string
  89.     {
  90.         return HiddenType::class;
  91.     }
  92.     public function getBlockPrefix(): string
  93.     {
  94.         return 'sylius_resource_autocomplete_choice';
  95.     }
  96. }