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 :

Création dynamique de champs dans un formulaire [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Par défaut Création dynamique de champs dans un formulaire
    Bonjour,

    J'ai un formulaire avec les informations profil (nom prenom date de naissance) ProfilForm et un sous formulaire AdressesForm où j'ai les adresses.

    Dans ProfilForm j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            $builder->add('adresses', 'collection', array(
        	    	'type' => new AdressesForm(),
        	    	'required' => false,
        	'error_bubbling'=>true
        	));
    qui fait appel au formulaire AdressesForm.


    Dans la page twig je propose à l'utilisateur d'ajouter de nouvelles adresses mais je ne vois pas trop comment le faire car aujourd'hui je suis obligé de créer des adresses vides avant de faire appel au formulaire Profil afin de les modifier. Mais je cherche une solution car je ne peux pas savoir à l'avance combien d'adresses il veut remplir...
    En fait j'ai plusieurs idées :
    1ere : Dissocier les deux formulaires Profil et Adresses, puis créer des formulaires en Jquery/Ajax et les validés à la voler (mais j'aime pas)
    2eme : trouver un moyen de lui rajouter dynamiquement des champs dans le formulaire, ce que j'ai fait mais il me renvoie une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ce formulaire ne doit pas contenir des champs supplémentaires
    Donc si vous avez une idée ou une piste à me donner . Merci.

    Cordialement

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    bonjour,
    regarde du coté des options allow_add, allow_delete et prototype et consulte ce lien :

    https://github.com/beberlei/AcmePizz...ndex.html.twig

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Par défaut
    Re, merci je suis allez voir le lien, j'ai suivi des tutoriels Symfony mais j'ai une erreur et je cherche depuis toute l'après-midi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Expected argument of type "object or array", "NULL" given

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Il faudrait plus d'infos sur cette erreur (quel objet, quel méthode,...) ainsi que le mapping de tes entités et le code du controller.

    Néammoins peut être que ça vient de l'option required=false.
    enlève la, elle me semble de toute façon inutile (il y aura toujours une collection dans l'attribut adresses, même si elle ne contient aucun item)

    En attendant voici un exemple d'implémentation au niveau du formulaire et de l'entité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //// My/Bundle/Form/ProfilType
    	$builder->add('adresses', 'collection', array(
    			    	'type' => new AdressesForm(),
    					'error_bubbling'=>true,
    					'allow_add'=>true,
    					'allow_delete'=>true,
    					'prototype'=>true,
    					'by_reference' => false,
    			));
    /*l'option 'by_reference' indique que le binding  appelera la méthode setAdress de l'entité Profil
    sinon le binding se ferait ainsi :
    foreach($adressInForm as $adress){
    	$profil->getAdresse()[]=$adress;//pas de référence inversé dans adresse!
    }
    */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    //// My/Bundle/Entity/Profil
    /**
    * @ORM\OneToMany(targetEntity="Adress", mappedBy="profil",  cascade={"persist", "remove", "merge"}, orphanRemoval=true )
    * l'option orphanRemoval indique que les entités Adress n'ayant pas de relation avec une entité profile doivent être supprimés de la BDD
    */
    private $adresses;
     
    public function __construct(){
    	$this->adresses=new \Doctrine\Common\Collections\ArrayCollection();
    }
    public getAdresses(){
    	return $this->adresses;
    }
    /* ajoute la référence à profil dans l'adresse*/
    public function addAdress(Adress $adress){
    	$adress->setProfil($this);
    	$this->adresses[]=$adress;
    }
    // function qui sera appelé par le formulaire*/
    public function setAdresses($listOfAdress){
    	$this->adresses=new \Doctrine\Common\Collections\ArrayCollection();
    	foreach($listOfAdress as $adress){
    		$this->addAdress($adress);
    	}
    }
    d'aprés http://sf.khepin.com/2011/08/inconsi...orm-framework/

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Par défaut
    Re, merci c'est bon j'ai trouvé.
    En fait j'avais un problème avec un champ read_only.

    Par contre l'ajout marche bien mais quand je veux supprimer sa ne me le supprime pas... J'ai bien mis
    De plus, je comprends pas parce que quand je supprime une adresse et que je valide il me renvoie la page sans l'adresse supprimer (donc ca va) mais quand je clique sur le lien ou il y a toute mes adresses il est toujours présente! (je n'ai pas oublié le:

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Est ce que tu as bien le parametre "orphanRemoval" dans ton mapping?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/08/2012, 14h07
  2. [1.x] EmbedForm et ajout dynamique de champ dans une formulaire.
    Par Noobboy dans le forum Symfony
    Réponses: 6
    Dernier message: 10/08/2011, 15h03
  3. [MySQL] Création dynamique de champs dans une table
    Par kamnouz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/05/2011, 11h09
  4. [AC-2003] Création d'un champ dans un formulaire (Débutant)
    Par chicabonux dans le forum IHM
    Réponses: 4
    Dernier message: 23/05/2010, 20h27
  5. Ajout dynamique de champ dans un formulaire
    Par gendalf37400 dans le forum Ruby on Rails
    Réponses: 5
    Dernier message: 06/06/2007, 15h11

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