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 :

Récupération de data depuis un formulaire [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut Récupération de data depuis un formulaire
    Bonjour à tous,

    J'ai crée un formulaire imbriqué suivant :

    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
    class CallCollectionType extends AbstractType
    { 
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('calls', 'collection', [
                    'type'           => new CallType(),
                    'allow_add'      => true,
                    'by_reference'   => false,
                ])
            ;
        }
     
     
     
     
     
        public function getName()
        {
            return 'callcollection_form';
        }
    }
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    class CallType extends AbstractType
    { 
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('startDate', 'datetime', array(
                    'widget' => 'single_text',
                    'format' => 'yyyy-MM-dd HH:mm:ss',
                ))
                ->add('endDate', 'datetime', array(
                    'widget' => 'single_text',
                    'format' => 'yyyy-MM-dd HH:mm:ss',
                ))
                ->add('rescheduledDate', 'datetime', array(
                    'widget' => 'single_text',
                    'format' => 'yyyy-MM-dd HH:mm:ss',
                ))
                ->add('callStatus')
                ->add('callStatusComment')
                ->add('doNotCallAnymore')          
                ->add('company', null, array(
                    'class'     => 'AppBundle:Company',
                    'property'  => 'id'
                ))        ;
        }
     
     
     
     
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults([
                'data_class' => 'AppBundle\Entity\Call'
            ]);
        }
     
     
     
     
     
        public function getName()
        {
            return 'call_form';
        }
    }
    Donc le formulaire CallCollectionType ne correspond à aucune entité, en revanche il me permet de réceptionner une collection d'entités Call, ces mêmes entités que je souhaiterais donc enregistrer dans ma base de données.

    Malheureusement cela ne fonctionne pas comme prévu, je m'explique.
    Voici le contrôleur:

    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
        public function saveAnswersAction(Request $request)
        {
            $user = $this->getUser(); 
            $form = $this->createForm(new CallCollectionType());
            $form->handleRequest($request);
            if ($form->isValid())
            {      
                $em = $this->getDoctrine()->getManager();      
                $caller = $em->getRepository('AppBundle:Caller')->getOneWithCurrentParticipationAssignment($user->getId());
     
                $calls = $form->getData();
                \Doctrine\Common\Util\Debug::dump($calls, 2);
                foreach ($calls as $call)
                {
                    $call->setCaller($caller);
                    $em->persist($call);
                }
                $em->flush();
     
                return new JsonResponse([
                    'status' => true,
                ]);
            }
            return new JsonResponse([
                'status' => false,
            ]);
    Qui me retourne l'erreur suivante : Call to a member function setCaller() on a non-object

    Je vous montre le rendu du Doctrine dump() effectué sur $calls, qui est à mon goût fort étrange : array (size=1) 'calls' => array (size=1) 0 => string 'AppBundle\Entity\Call' (length=21)

    Donc je n'ai pas réussi à récupérer des entités Call à l'aide de mon formulaire, où est mon erreur?

    merci d'avance

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut
    Bon ridicule, problème solved, j'explique :

    Pour ceux qui récupèrent les data du formulaire à l'aide de getData(), sachez que cela retourne un tableau dont les clés ne sont pas 0, 1, 2 etc mais en fait le nom des fields du form

    Pour mon exemple, je pouvais récupérer ma collection en faisant simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach ($calls['calls'] as $call)
    {...}
    Bien à vous !

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

Discussions similaires

  1. Problème récupération du fichier depuis son formulaire
    Par zikyoubi dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 17/08/2013, 14h26
  2. récupération de données depuis formulaire web
    Par vince29 dans le forum Android
    Réponses: 1
    Dernier message: 12/07/2011, 10h26
  3. Récupération chemin complet depuis formulaire.
    Par miabi dans le forum Langage
    Réponses: 6
    Dernier message: 09/12/2010, 09h39
  4. [Prototype] Ajax.updater et récupération de valeurs depuis un formulaire
    Par Skiant dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 09/01/2009, 16h31
  5. Réponses: 2
    Dernier message: 28/10/2004, 16h54

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