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 :

recupérer la valeur user_id apres la soumission


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 6
    Par défaut recupérer la valeur user_id apres la soumission
    Bonjour,

    Le problème: je dispose de deux tables relation 1-1 pour gérer mes utilisateurs:
    Table user: (id, nom, prenom, email, password, salt...) et
    Table user_profile (id, user_id, sexe, date_naissance....)

    J'ai crée mon formulaire pour l'inscription et tout ce passe bien. Les choses se corsent quand j'esaie de modifier le profil.
    Pour cela j'ai utilisé la fonction mergeform pour fusionner les forms des deux tables mais ça ne fonctionne pas.
    Donc ce que je voudrais c'est une fois mon formulaire validé à l'inscription, ajouter un enregistrement dans la table profil en récupérant l'id du user et le mettre dans la table profil.

    Je ne sais pas trop comment je dois m'y prendre.
    Surcharger la fonction save (ou doSave) dans RegisterUserForm ou alors le gérer dans l'action executeRegister.

    Je suis preneur de vos avis, conseils et astuces.
    Merci
    Cordialement

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 66
    Par défaut
    Salut,

    il faut que tu utilises embeddedForm.

    Dans ta classe formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $form = new UserForm($this->object->profile);
     
    $this->embeddedForm('user', $form)
    Ne connaissant pas ton schema je ne connais ni les alias ni les noms exacts de tes formulaires donc ce n'est qu'un exemple qui te donne la marche à suivre.
    A toi de voir dans quelle classe formulaire tu mets ca ou de voir si tu en crais une nouvelle qui extend UserForm ou ProfilForm etc ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 6
    Par défaut
    Bonjour
    Merci Muspil pour ta réponse.

    Voici le schéma de données
    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
     
    user:
        _attributes: { phpName: User }
        id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
        nom: { type: VARCHAR, size: '150', required: true }
        prenom: { type: VARCHAR, size: '150', required: true }
        password: { type: VARCHAR, size: '255', required: false }
        email: { type: VARCHAR, size: '255', required: false }
        avatar: { type: VARCHAR, size: '255', required: false }
        ....
     
      user_profil:
        _attributes: { phpName: UserProfil }
        id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
        user_id: { type: INTEGER, size: '11', required: true, foreignTable: user, foreignReference: id, onDelete: RESTRICT, onUpdate: RESTRICT }
        telephone: { type: VARCHAR, size: '20', required: false }
        adresse: { type: VARCHAR, size: '255', required: false }
        code_postal: { type: VARCHAR, size: '255', required: false }
        ville: { type: VARCHAR, size: '255', required: false }
        pays: { type: VARCHAR, size: '255', required: false }
        website: { type: LONGVARCHAR, required: false }
        anniversaire: { type: VARCHAR, size: '255', required: false }
        _indexes: { fk_user_profil_user: [user_id] }
    Avant de voir ta réponse, voici ce que j'ai fait dans le fichier action:
    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
     
      public function executeInscription(sfWebRequest $request)
      {    
        $this->form = new RegisterUserForm();
        if ($request->isMethod('post'))
        {
          $this->form->bind($request->getParameter('register'));
          if ($this->form->isValid())
          {
            $user = $this->form->save();
     
            //on recupere la valeur de l'id de l'utilisateur enregistré
            $user_id = $user->getId();
     
            //on crée objet propel pour ajouter l'id dans  la table user_profil
            $c = new Criteria();
            $c->add(UserProfilPeer::USER_ID,$user_id);
            $profil = UserProfilPeer::doSelectOne($c);
            if (!$profil) {
            	$profil = new UserProfil();
            	$profil->setUserId($user_id);
            	$profil->save();
            }
     
          $this->redirect('user/edit?id='.$user->getId());
     
          }
        } 
     
      }
    En faisant ainsi, je crée un enregistrement dans ma table 'user_profile' des qu'un utilisateur s'enregistre comme cela, je suis sur de faire correspondre les ids..


    Pour mon formulaire, j'ai utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class UserForm extends BaseUserForm
    {
      public function configure()
      {
      	$this->mergeForm(new UserProfilForm(UserProfilPeer::retrieveByPK($this->getObject()->getId())));
     
      }
    Donc avec ce code, j'arrive à avoir sur ma page l'ensemble des infos 'user' et 'user_profile' que je souhaite afficher
    Mais la je ne sais pas trop ce que je dois faire pour forcer l'enregistrement des modifs effectuées dans les tables.
    J'imagine qu'il faut surcharger certaines fonctions mais je ne sais pas lesquelles.

    Une petite idée? Pour l'ajout d'un enregistrement dans 'user profil' au moment de l'inscription c'est une bonne manière de faire?

    Je suis preneur de toute aide ou exemple (lien, code...) qui puisse m'aider.
    En effet la doc de symfony est un brin obscure par rapport aux fonctions embedform et mergeform.

    Merci

Discussions similaires

  1. [1.x] Ajouter une valeur aprés la soumission d'un form
    Par clamo dans le forum Symfony
    Réponses: 2
    Dernier message: 24/11/2009, 19h16
  2. recupérer la valeur d'un bouton radio
    Par ericmart dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/05/2008, 15h42
  3. recupération d'un port après fermeture
    Par shaftJackson dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 14/12/2005, 11h18
  4. Réponses: 3
    Dernier message: 11/08/2005, 15h54
  5. Réponses: 3
    Dernier message: 10/07/2005, 17h37

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