src/Form/Type/ImportExport/ImportType.php line 15

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Type\ImportExport;
  4. use FriendsOfSylius\SyliusImportExportPlugin\Importer\ImporterRegistry;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  7. use Symfony\Component\Form\Extension\Core\Type\FileType;
  8. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\OptionsResolver\OptionsResolver;
  11. class ImportType extends AbstractType
  12. {
  13.     /** @var ImporterRegistry */
  14.     private $importerRegistry;
  15.     public function __construct(ImporterRegistry $importerRegistry)
  16.     {
  17.         $this->importerRegistry $importerRegistry;
  18.     }
  19.     public function configureOptions(OptionsResolver $resolver): void
  20.     {
  21.         $resolver->setRequired('importer_type');
  22.         $resolver->setAllowedTypes('importer_type''string');
  23.         $resolver->setDefaults([
  24.             'data_class' => null,
  25.             'allow_extra_fields' => true,
  26.         ]);
  27.     }
  28.     public function buildForm(FormBuilderInterface $builder, array $options): void
  29.     {
  30.         if (array_key_exists('importer_type'$options)) {
  31.             $block_name 'import_data-' $options['importer_type'];
  32.         } else {
  33.             $block_name 'import_data';
  34.         }
  35.         $builder
  36.             ->add('format'ChoiceType::class, [
  37.                 'choices' => $this->buildChoices($options),
  38.                 'expanded' => false,
  39.                 'multiple' => false,
  40.                 'required' => true,
  41.             ])
  42.             ->add('import-data'FileType::class, [
  43.                 'required' => true,
  44.                 'block_name' => $block_name,
  45.                 'label' => 'app.ui.file',
  46.             ])
  47.             ->add('headerKeys'HiddenType::class)
  48.         ;
  49.     }
  50.     private function buildChoices(array $options): array
  51.     {
  52.         /** @var string $importerType */
  53.         $importerType $options['importer_type'];
  54.         $choices = [];
  55.         if ($this->importerRegistry->has(ImporterRegistry::buildServiceName($importerType'csv'))) {
  56.             $choices['CSV'] = 'csv';
  57.         }
  58.         if ($this->importerRegistry->has(ImporterRegistry::buildServiceName($importerType'xlsx'))) {
  59.             $choices['Excel'] = 'xlsx';
  60.         }
  61.         return $choices;
  62.     }
  63. }