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 :

Passer un objet dans un formType


Sujet :

Symfony PHP

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut Passer un objet dans un formType
    Bonjour,

    Je n'arrive pas à passer mon objet dans le constructeur de mon formType.
    En fait dans mon formType, j'ai besoin de connaître l'objet pour créer ou non certains champ.
    Donc j'ai créé un contructeur dans lequel je passe mon objet lors de la construction de mon formulaire.
    Le problème c'est que symfony me dit que ce n'est pas un objet, mais un id qui est passé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContextErrorException: Catchable Fatal Error: Argument 3 passed to \DataBaseBundle\Form\HospitalType::__construct() must be an instance of \DataBaseBundle\Entity\Hospital, integer given
    J'ai fait un var_dump avant d'appeler mon constructeur et pourtant ça ressemble bien à mon objet.
    Voici mon controlleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $siteUser = $em->getRepository('DataBaseBundle:Hospital')->findOneByProfile($linkProfile);
    $formSiteUser = $this->createForm(new HospitalType($page, 
                                                       $this->generateUrl('repro_site', array('page' => $page)), 
                                                       $siteUser
                                                      ),
                                      $siteUser);
    Dans mon HospitalType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class HospitalType extends AbstractType
    {
        private $page = 0;
        private $urlAction;
        private $hospital = null;
     
        public function __construct($page, $url, \DataBaseBundle\Entity\Hospital $ssh) {
            $this->page = $page;
            $this->urlAction = $url;
            $this->hospital = $ssh;
        }
    ...
    Il faut que je refasse une requete dans mon formType pour récupérer à nouveau l'objet ?
    Merci de votre aide.
    Jérôme

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    en effet c'est bizarre. que te revoit un var_dump/print_r de:$siteUser avant de le donner en paramètre?

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    un var_dump() entre l'appel au findOneByProfile et l'appel au createForm me renvoie un objet Hospital, comme prévu...
    Jérôme

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    Oui c'est un comportement étrange.

    En même temps, Il y a d'autres méthodes pour récupérer l'objet dans le FormType, sans utiliser le contructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class HospitalType extends AbstractType
    {
      public function buildForm(FormBuilderInterface $builder, array $options){
        $hospital=$builder->getData();
        //ou bien
        $hospital = $options['data'];    
        if($hospital->getFoo()){
           $builder->add('....');
        }
        $builder->add('....');
      }
    }
    Dans d'autres cas (formulaire embarqué) il faut utiliser les FormEvents http://symfony.com/fr/doc/current/co...nderlying-data

    et coté controlleur (au passage, l'url de soumission du formulaire est une option nativement supporté).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $siteUser = $em->getRepository('DataBaseBundle:Hospital')->findOneByProfile($linkProfile);
    $formSiteUser = $this->createForm(new HospitalType,$siteUser, array(
                                                          'action'=>$this->generateUrl('repro_site', array('page' => $page))
                                                      ));

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Merci Arno pour ton retour.
    Je vais essayé de creuser un peu plus, mais c'est étrange
    Merci du tuyau pour l'action nativement supportée..
    Jérôme

Discussions similaires

  1. [2.x] Acceder aux propriété de l'objet dans un FormType
    Par jejeman dans le forum Symfony
    Réponses: 2
    Dernier message: 04/06/2014, 09h54
  2. Passer un Objet (pojo) par get dans une url.
    Par Altenide dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 09/11/2010, 12h24
  3. [1.x] Passer un objet dans un link_to
    Par nims dans le forum Symfony
    Réponses: 3
    Dernier message: 17/07/2009, 13h08
  4. Réponses: 1
    Dernier message: 10/02/2007, 20h30

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