IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Symfony 5 : form avec champ upload de fichier et formulaire invalide


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Points : 136
    Points
    136
    Par défaut Symfony 5 : form avec champ upload de fichier et formulaire invalide
    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 :
    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;
    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'),
    	]);
    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
    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 mon controleur, je fais exactement selon le principe de la doc : https://symfony.com/doc/current/cont...load_file.html

    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 !

  2. #2
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut Coloration syntaxique twig
    Salut,

    je pense que ce n'est pas la bonne solution... même si tu retourne le nom de ton fichier que tu passes à ton jquery, l'objet file ne sera plus existant dans ton nouveau DOM..., il faudra donc de toute façon recharger ton image.

    EN tout état de cause pour envoyer le nom de ton image récupérée depuis le hidden, tu l'envoie en tant que variable à ta vue puis dans ta page tu test si ta variable existe et si oui tu la mat dans une variable js

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {% if foo is defined %}
       <script>
    var mavar = {{foo}}
    </script>
    {% endif %}

    il ne te reste qu'à récupérer mavar dans ton jquery...
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Points : 136
    Points
    136
    Par défaut
    Merci beaucoup Viduc pour ta réponse et tes indications ! Désolé pour le délai de réponse, j'étais pris sur des imprévus...

    Je n'avais pas pensé à ce que tu dis, avec raison : "il faudra donc de toute façon recharger ton image".

    Je n'ai donc pas poursuivi sur cette voie, mais je comprends le principe de ta solution, merci encore !

    Mais alors, toi ou quelqu'un a une idée pour mon problème ?
    ça vient d'une mauvaise définition de mon entité ou mon formulaire ? J'ai zappé un paramètre magique qui résout tout ?

    Là, je ne retrouve plus, mais de mémoire, mon champ FileType est vide à cause d'un bug dans bootstrap, d'où l'ajout de mon code Jquery. Y a t'il une solution ???

    Merci d'avance à toi et à tous !

Discussions similaires

  1. problème avec l'upload des fichiers
    Par bousyass dans le forum JSF
    Réponses: 6
    Dernier message: 03/06/2010, 14h37
  2. [GWT-EXT] Form, JsonReader et upload de fichier.
    Par k o D dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 16/06/2009, 14h15
  3. [Upload] upload de fichier sans formulaire
    Par gforce dans le forum Langage
    Réponses: 8
    Dernier message: 04/04/2007, 11h18
  4. [Upload] Upload de fichier par formulaire
    Par discogarden dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2006, 19h17
  5. Envoi d'un form avec champs disabled
    Par Ekik dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/03/2006, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo