Bonjour à tous,
Sous SF 5.2.1 (avec Bootstrap 4 et Jquery), j'ai une entité qui contient un champ texte pour stocker le nom d'un fichier uploadé, et d'autres champs avec des asserts.
Entité produit :
Formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 /** * @ORM\Column(type="text", nullable=true) * @Assert\Length(max = 1000, maxMessage = "La description ne peut pas dépasser {{ limit }} caractères.") */ private $description; /** * @ORM\Column(type="string", length=200) * @Assert\NotBlank(message="Ce champ doit être renseigné.") * @Assert\Length(max = 200, maxMessage = "Le champ 'nom de la photo' ne peut pas dépasser {{ limit }} caractères.") */ private $nomImage;
Et dans ma page, j'ai un peu de Jquery pour afficher le nom du fichier dans le champ du formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ->add('description', TextareaType::class, array( 'label' => 'Description', )) ->add('nomImage', FileType::class, [ 'label' => 'Fichier de la photo', 'mapped' => false, 'attr' => array('placeholder' => 'Sélectionnez un fichier'), ]);
Dans mon controleur, je fais exactement selon le principe de la doc : https://symfony.com/doc/current/cont...load_file.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <script> // afficher la valeur dans le champ input du fichier sélectionné $('.custom-file-input').on('change', function(event) { var inputFile = event.currentTarget; $(inputFile).parent() .find('.custom-file-label') .html(inputFile.files[0].name); }); </script>
Dans le cas le plus courant, où les validations des champs sont ok, tout fonctionne.
Dans le cas où mes saisies sont bloquées par un assert, par exemple la valeur de mon champ description qui est trop longue, mon controleur a faux à la ligne if ($form->isSubmitted() && $form->isValid()).
Mon formulaire se réaffiche bien, avec les erreurs affichées et les valeurs précédemment saisies, sauf pour le champ nomImage qui est vide. Il faut alors aller rechercher le même fichier par le bouton browse de ce champ.
Je pense qu'il faut que je complète mon Jquery, qui n'agit que quand on sélectionne un fichier.
Mais dans ce cas, je ne vois pas où aller chercher la valeur de la saisie précédente.
J'ai essayé en ajoutant un else au if ($form->isSubmitted() && $form->isValid()) du controleur, où j'alimente un champ que j'ajoute, champ en hidden qui prend la valeur précédente du champ nomImage.
Mais là, je ne trouve pas comment compléter mon Jquery pour aller chercher cette valeur, et alimenter le champ nomImage.
ça vous semble faisable de faire comme ça, ou je me suis lancé dans une usine à gaz ?
Vous avez des idées svp, que ça soit en complément de mes essais, ou tout à fait autre chose ?
Merci d'avance !
Partager