vendor/sylius/resource-bundle/src/Bundle/Form/Type/FixedCollectionType.php line 21

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 Symfony\Component\Form\AbstractType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\OptionsResolver\Options;
  15. use Symfony\Component\OptionsResolver\OptionsResolver;
  16. final class FixedCollectionType extends AbstractType
  17. {
  18.     public function buildForm(FormBuilderInterface $builder, array $options): void
  19.     {
  20.         foreach ($options['entries'] as $entry) {
  21.             $entryType $options['entry_type']($entry);
  22.             $entryName $options['entry_name']($entry);
  23.             $entryOptions $options['entry_options']($entry);
  24.             $builder->add($entryName$entryTypearray_replace([
  25.                 'property_path' => '[' $entryName ']',
  26.                 'block_name' => 'entry',
  27.             ], $entryOptions));
  28.         }
  29.     }
  30.     public function configureOptions(OptionsResolver $resolver): void
  31.     {
  32.         $resolver->setRequired('entries');
  33.         $resolver->setAllowedTypes('entries', ['array', \Traversable::class]);
  34.         $resolver->setRequired('entry_type');
  35.         $resolver->setAllowedTypes('entry_type', ['string''callable']);
  36.         $resolver->setNormalizer('entry_type'$this->optionalCallableNormalizer());
  37.         $resolver->setRequired('entry_name');
  38.         $resolver->setAllowedTypes('entry_name', ['callable']);
  39.         $resolver->setDefault('entry_options', function () {
  40.             return [];
  41.         });
  42.         $resolver->setAllowedTypes('entry_options', ['array''callable']);
  43.         $resolver->setNormalizer('entry_options'$this->optionalCallableNormalizer());
  44.     }
  45.     public function getBlockPrefix(): string
  46.     {
  47.         return 'sylius_fixed_collection';
  48.     }
  49.     private function optionalCallableNormalizer(): \Closure
  50.     {
  51.         return
  52.             /**
  53.              * @param mixed $value
  54.              *
  55.              * @return mixed
  56.              */
  57.             function (Options $options$value) {
  58.                 if (is_callable($value)) {
  59.                     return $value;
  60.                 }
  61.                 return /** @return mixed */ function () use ($value) {
  62.                     return $value;
  63.                 };
  64.             }
  65.         ;
  66.     }
  67. }