src/Form/Common/CustomFileType.php line 71

Open in your IDE?
  1. <?php
  2. namespace App\Form\Common;
  3. use Nellapp\Bundle\SDKBundle\Uploader\Service\NellappFileService;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\FileType;
  7. use Symfony\Component\Form\Extension\Core\Type\TextType;
  8. use Symfony\Component\Form\FormBuilderInterface;
  9. use Symfony\Component\Form\FormInterface;
  10. use Symfony\Component\Form\FormView;
  11. use Symfony\Component\OptionsResolver\Options;
  12. use Symfony\Component\OptionsResolver\OptionsResolver;
  13. class CustomFileType extends AbstractType
  14. {
  15.     public function __construct(
  16.         private ContainerInterface $container,
  17.         private NellappFileService $nellappFileService,
  18.     )
  19.     {
  20.     }
  21.     public function buildForm(FormBuilderInterface $builder, array $options): void
  22.     {
  23.         $builder
  24.             ->add('filename'TextType::class, [
  25.                 'required' => true,
  26.                 'attr' => [
  27.                     'data-custom-file-input-fileName' => true
  28.                 ]
  29.             ])
  30.             ->add('originalFilename'TextType::class, [
  31.                 'required' => true,
  32.                 'attr' => [
  33.                     'data-custom-file-input-originalFilename' => true
  34.                 ]
  35.             ])
  36.             ->add('file'FileType::class, [
  37.                 'mapped' => false,
  38.                 'label' => 'Importer un fichier (facultatif)',
  39.                 'required' => true,
  40.                 'attr' => [
  41.                     'multiple' => false,
  42.                     'accept' => implode(','array_keys($options['mime_types'])),
  43.                     'data-custom-file-input-file' => true,
  44.                     'data-custom-file-original-url' => $builder->getData() ? $builder->getData()->getOriginalFileName() : null
  45.                 ]
  46.             ]);
  47.     }
  48.     public function configureOptions(OptionsResolver $resolver): void
  49.     {
  50.         $resolver->setDefaults([
  51.             'upload_endpoint' => null,
  52.             'mime_types' => [],
  53.             'max_size' => null,
  54.         ]);
  55.         $resolver->setRequired('data_class');
  56.         $resolver->setNormalizer('attr', function (Options $options, array $value): array {
  57.             if ($options['upload_endpoint'] != null) {
  58.                 $helper $this->container->get('oneup_uploader.templating.uploader_helper');
  59.                 return array_merge(
  60.                     $value,
  61.                     [
  62.                         'data-custom-file-uploader' => true,
  63.                         'data-script-handled' => "false",
  64.                         'data-custom-file-uploader-endpoint' => $helper->endpoint($options['upload_endpoint']),
  65.                     ]
  66.                 );
  67.             }
  68.             return $value;
  69.         });
  70.         $resolver->setNormalizer('max_size', function(Options $options, ?int $value) {
  71.             $class $options['data_class'];
  72.             $config $this->nellappFileService->getConfig($class::getUploaderAlias());
  73.             return $config['maxSize'] ?? null;
  74.         });
  75.         $resolver->setNormalizer('mime_types', function(Options $options, array $value) {
  76.             $class $options['data_class'];
  77.             $config $this->nellappFileService->getConfig($class::getUploaderAlias());
  78.             return $config['mimeTypes'] ?? [];
  79.         });
  80.         // Options used to  render the list of extensions and the max size accepted by the uploader. Should be linked with the OneUpUploader
  81.         $resolver->setRequired('extensions');
  82.         $resolver->setAllowedTypes('extensions''string[]');
  83.     }
  84.     public function buildView(FormView $viewFormInterface $form, array $options): void
  85.     {
  86.         $extensions = [];
  87.         foreach ($options['extensions'] as $extension) {
  88.             if (!in_array($extension$extensions)) {
  89.                 $extensions[] = $extension;
  90.             }
  91.         }
  92.         $view->vars['file_max_size'] = $options['max_size'];
  93.         $view->vars['file_allowed_extensions'] = $extensions;
  94.     }
  95.     public function getBlockPrefix(): string
  96.     {
  97.         return 'upload_file';
  98.     }
  99. }