diff --git a/Form/Type/FileUploadType.php b/Form/Type/FileUploadType.php index 6539fde11d70ce09e9d7ff8fa91c9410568e3e97..da58c68a9eca8236ab05b2d48ef0c0a11a3af2a4 100644 --- a/Form/Type/FileUploadType.php +++ b/Form/Type/FileUploadType.php @@ -17,8 +17,11 @@ use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; +use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\Routing\Router; +use Symfony\Component\Validator\Constraints\Count; +use Symfony\Component\Validator\Constraints\NotNull; class FileUploadType extends AbstractType { @@ -87,6 +90,38 @@ class FileUploadType extends AbstractType $resolver->setDefaults(['max_chunk_size' => $this->maxChunkSize ?: 0]); $resolver->setAllowedTypes(['max_chunk_size' => 'int']); + + $resolver->setNormalizers(['constraints' => function(OptionsResolver $options, $constraints) { + return $this->addConstraints($options, $constraints); + }]); + } + + protected function addConstraints(OptionsResolver $options, $constraints) + { + if($options['multiple']) { + $range = []; + if($options['required']) { + $range['min'] = 1; + $range['minMessage'] = 'file_upload.required'; + } + if($options['max_number_of_files']) { + $range['max'] = $options['max_number_of_files']; + $range['maxMessage'] = 'file_upload.max_number_of_files'; + } + if(!empty($range)) { + $constraints[] = new Count($range); + } + + } elseif($options['required']) { + $required = new \Symfony\Component\Validator\Constraints\NotBlank(['message' => 'file_upload.required']); + $constraints[] = $required; + } + + if($options['min_file_size'] || $options['max_file_size'] || $options['accept_file_types']) { + // @TODO gère les tailles + } + + return $constraints; } protected function getWidgetDefaults()