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 :

[Form] Création d'un formulaire multi entité


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut [Form] Création d'un formulaire multi entité
    Bonjour à tous,

    Je suis actuellement confronté à un problème:

    J'ai besoin de créer une unique formulaire qui va regrouper la modification d'un certain nombre d'entité.

    Un code explique mieux qu'un long discours, voilà le mien:

    CourrierController:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?
    	$courriers = array('courriers' => $this->getDoctrine()->getRepository('WebscmServiceBundle:Courrier')->findAll());
    	$form = $this->createForm(new TotalCourrierCommandeType, $courriers);
    	$form->createView();
    TotalCourrierCommandeType:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?
    	public function buildForm(FormBuilder $builder, array $options)
    	{
    		$builder
    			->add('courriers', 'collection', array ('type' => new CourrierCommandeType))
    		;
    	}
    CourrierCommandeType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?
    	public function buildForm(FormBuilder $builder, array $options)
    	{
            	$builder
    			->add('commande')
    			->add('courrierCommande')
    			->add('CommentaireCourrierCommande', 'textarea', array('max_length' => 255))
    		;
    	}
    Je me retrouve avec une erreur qui me dit : "Expected argument of type "Webscm\ServiceBundle\Entity\Courrier", "array" given"

    Quelqu'un saurait comment corriger ce qui en va pas ?

    Merci d'avance =)

  2. #2
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut
    Le array sur le findAll() est t'il utile? La méthode de ton Repo ne renvoie-t'elle pas un array?

    Sinon il me semble que c'est ta création de formulaires qui ne va pas.
    Personnellement, je ferai ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?
    foreach($courriers as courrier)
    {
    $form = $this->createForm(new CourrierCommandeType, $courrier);
    $form->createView();
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé la solution.

    J'avais déjà envisagé ta méthode mais le problème est qu'elle me générait autant de formulaire qu'il y a d'entité, or moi je voulais un unique formulaire pour toutes mes entités.

    L'erreur venait du fait que dans mon TotalCourrierCommandeType j'avais laissé le bloc de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public function getDefaultOptions(array $options)
        {
            return array(
                'data_class' => 'Webscm\ServiceBundle\Entity\Courrier',
            );
        }
    C'est pour ça qu'il me disait qu'il attendait une entité Courrier et non un array() en paramètre. Depuis que j'ai enlevé ce bloc de code, j'arrive a générer mon formulaire peut importe le nombre d'entité que j'ai a modifier.

    Merci d'avoir répondu en tout cas

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    En revanche j'ai un nouveau problème au moment de la validation du formulaire.
    Dans mon controller, une fois le formulaire posté, je fais ça:

    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
     
    			$courriers = array('courriers' => $em->getRepository('WebscmServiceBundle:Courrier')->getCourrierCom());
    			$form = $this->createForm(new TotalCourrierCommandeType, $courriers);
     
    			$request = $this->getRequest();
    			$form->bindRequest($request);
     
    			if ($form->isValid()) 
    			{
    				// throw $this->createNotFoundException('Jusque là: OK');
    				foreach($courriers as $c)
    				{
    					$c->setDateCourrierCommande(date("Y-m-d H:i:s"));
    					$em->persist($c);
    				}
    				$em->flush();
     
    				$this->get('session')->setFlash('notice', 'Les courriers AR Commandes ont bien été enregistrés.');
    				return $this->redirect($this->generateUrl('WebscmServiceBundle_Courrier_index'));
    			}
    			// $this->get('session')->setFlash('notice', 'Une erreur s\'est produite lors de l\'enregistrement des courriers.');
    			// return $this->redirect($this->generateUrl('WebscmServiceBundle_Courrier_index'));
    			throw $this->createNotFoundException();
    Sauf que le $form->isValid() ne passe pas.
    Je ne comprend pas pourquoi puisque j'ai récupéré les mêmes entités que pour la création du formulaire et la seule chose que je fais c'est de décocher une checkbox dans le formulaire.
    J'ai essayé de traiter les entités une par une en faisant un truc du genre :

    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
     
    <?
    			$courriers = array('courriers' => $em->getRepository('WebscmServiceBundle:Courrier')->getCourrierCom());
     
    			foreach($courriers as $c)
    			{
    				$form = $this->createForm(new CourrierCommandeType, $c);
     
    				$request = $this->getRequest();								// On récupère les infos du formulaire posté.
    				$form->bindRequest($request);								// On lie ces infos a notre formulaire.
     
    				if ($form->isValid()) 
    				{															// Si les infos sont valides :
    					$c->setDateCourrierCommande(date("Y-m-d H:i:s"));
    					$em->persist($c);									// On persiste les Courriers
    				}
    			}
     
    			$em->flush();
    Mais sans succès non plus.

    Auriez vous une idée de pourquoi ça ne marche pas ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 74
    Points
    74
    Par défaut
    Peux tu afficher les messages d'erreurs ?
    Ne connaissant pas plus ton code on peux difficilement deviner d'où viens le problème.

Discussions similaires

  1. [2.x] [Form] Requête dans un formulaire d'entité
    Par Parmenion dans le forum Symfony
    Réponses: 0
    Dernier message: 02/04/2013, 10h35
  2. Problème création formulaire Multi critère Access
    Par kennygthebest dans le forum VBA Access
    Réponses: 12
    Dernier message: 01/03/2012, 13h16
  3. [XL-97] Création d'un formulaire de recherche multi critère
    Par lisooo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/02/2012, 14h56
  4. [AC-2002] Création d'un formulaire multi-critères
    Par nesumi dans le forum IHM
    Réponses: 2
    Dernier message: 31/08/2011, 13h42
  5. [Joomla!] [Art'Form] Création d'un formulaire
    Par activeks dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 24/12/2008, 22h19

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