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 2] Passer l'id d'une entité à un formulaire [2.x]


Sujet :

Symfony PHP

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Points : 20
    Points
    20
    Par défaut [Symfony 2] Passer l'id d'une entité à un formulaire
    Bonjour à tous,

    Depuis un javascript, j'envoie par la méthode post à l'aide de la méthode .ajax() en JQuery des nouvelles informations à destination d'un formulaire afin d'instancier des objets et de les enregistrer en base de données.

    Mon entité Call se définit comme suit :

    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
    class Call
    {
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
        /**
         * @ORM\Column(type="datetime")
         */
        private $startDate;
     
        /**
         * @ORM\Column(type="datetime")
         */
        private $endDate;
     
        /**
         * @ORM\Column(type="string", length=60)
         */
        private $callStatus;
     
        /**
         * @ORM\Column(type="text")
         */
        private $callStatusComment;
     
        /**
         * @ORM\ManyToOne(targetEntity="Company", inversedBy="calls")
         * @ORM\JoinColumn(nullable=FALSE)
         */
        private $company;
    Ce qui m'intéresse ici c'est donc de sauvegarder un nouveau Call en base de données, mais ce Call comprend dans ses membres une company (de l'entité Company, donc)

    Dans ma requête ajax, j'envoie donc les informations nécessaires afin de remplir mon formulaire CallType, ainsi que l'id de la company (company déjà présente en base de données)

    Voici mon CallType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class CallType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('startDate', 'datetime')
                ->add('endDate')
                ->add('callStatus')
                ->add('callStatusComment')
                ->add('company')
            ;
        }
    Question : Que dois-je modifier dans mon CallType afin que si je lui passe l'id de la Company, ça fasse le lien avec la Company présente dans la BDD du même ID? En effet lorsque je laisse tel quel, j'obtiens cette exception :

    A "__toString()" method was not found on the objects of type "AppBundle\Entity\Company" passed to the choice field. To read a custom getter instead, set the option "property" to the desired property path.

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Je pense qu'il faut passer par un convertisseur de données afin de transformer l'id en entité company. Voir cette page de documentation

  3. #3
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    Pour moi il faut que dans ton controler tu set la compagnie de ton call en l'ayant au préalable récupéré via doctrine

    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
     
     
    /**
     * @Route("/call/{companyId}", name="new_call")
     */
    public function newAction($companyId, Request $request) {
      $em = $this->get('doctrine')->getEntityManager();
      $compagny = $em->find('TonBundle:Company', $companyId);
      $call = new Call();
      $call->setCompanyr($compagny);
     
      $form = $this->get('form.factory')->create(new CallType(), $call);
      $form->handleRequest($request);
     
      if ($form->isValid()) {
        //......
     
      }
    }

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour vos réponses, les deux fonctionnent bien, la seconde pour dépanner sans se prendre la tête, la première pour être propre et efficace.
    Merci encore

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Bonjour,

    La réponse est dans la question

    Question : Que dois-je modifier dans mon CallType afin que si je lui passe l'id de la Company, ça fasse le lien avec la Company présente dans la BDD du même ID? En effet lorsque je laisse tel quel, j'obtiens cette exception :

    A "__toString()" method was not found on the objects of type "AppBundle\Entity\Company" passed to the choice field. To read a custom getter instead, set the option "property" to the desired property path.
    Crée dans ton entity company une méthode __toString() qui renvoie quelque chose, je pense le nom de la compagnie.

    Bonne journée et bonne année 2015

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/06/2012, 17h20
  2. Passer le mail d'une newsletter à un formulaire
    Par xavioche77 dans le forum Langage
    Réponses: 11
    Dernier message: 17/06/2011, 18h34
  3. [DOM] [Xerces] Insertion d'une entité
    Par Traroth dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/05/2008, 09h28
  4. passer deux parametre a une page
    Par unix27 dans le forum ASP
    Réponses: 3
    Dernier message: 30/09/2004, 18h14
  5. [VB6]Passer le focus à une instance précedente
    Par Jeremiah dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 16/09/2003, 10h01

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