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

ORM PHP Discussion :

Doctrine enregistrement en double


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Par défaut Doctrine enregistrement en double
    Bonjours à tous, je suis en train de construire un site avec symfony, seulement voila j'ai un bug à l'enregistrement de mes membres.

    Pour gérer mes membres j'utilise le plugin sfDoctrineGuardPlugin, que j'ai adapter pour mes besoins grave au tuto suivant:
    http://www.symfony-project.org/blog/...ineguardplugin

    Puis une inscription via le tuto:
    http://www.symfony-project.org/blog/...ineguardplugin

    Seulement voila à l'enregistrement, j'ai 2 enregistrement identique dans ma table profile 1 avec le champs en relation avec sf_guard_user rempli et correct et 1 ou le champs et vide.

    Voila mes codes:
    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
     
    Profile:
      columns:
        nom: { type: string(255) }
        prenom: { type: string(255) }
        user_id: { type: integer(4), notnull: true, unique: true }
        email: { type: string(255), notnull: true }
        msn: { type: string(255) }
        site: { type: string(255) }
        anniversaire: { type: date }
        promo: { type: string(255) }
        sexe: { type: integer(1) }
        signature: { type: string(4000) }
        nb_post: { type: integer, notnull: true, default: 0 }
        nb_roneo: { type: integer, notnull: true, default: 0 }
        avatar: { type: string(255) }
        infos: { type: string(4000) }
      relations:
        sfGuardUser: { local: user_id, foreign: id, onDelete: cascade }
    frontend/modules/register/actions/actions.class.php
    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
     
    <?php
    class registerActions extends sfActions
    {
     /**
      * Executes index action
      *
      * @param sfRequest $request A request object
      */
      public function executeIndex(sfWebRequest $request)
      {
        $this->form = new RegisterForm();
     
        //vérification du formulaire.
        if($request->isMethod('post'))
        {
        	$this->form->bind($request->getParameter($this->form->getName()));
        	if($this->form->isValid())
        	{
        		$this->form->save();
        	}
        }
      }
    }
    ?>
    frontend/modules/register/lib/RegisterForm.class.php
    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
     
    <?php
    class RegisterForm extends sfGuardUserForm
    {
    	public function configure()
    	{
    		//Inclusion des définitions dans la classe parente.
    		parent::configure();
     
    		//Suppression des champs définit automatiquement.
    		unset(	$this['is_active'],
    				$this['is_super_admin'],
    				$this['updated_at'],
    				$this['created_at'],
    				$this['algorithm'],
    				$this['salt'],
    				$this['last_login'],
    				$this['groups_list'],
    				$this['permissions_list']
    				);
    		$this->widgetSchema->setLabel('username', 'Login');
    		$this->widgetSchema->setLabel('password', 'Mot de passe');
    		$profileForm = new ProfileForm();
     
    		//Suppression des champs définit automatiquement de ProfileForm
    		unset(		$profileForm['user_id'],
    				$profileForm['nb_post'],
    				$profileForm['nb_roneo'],
    				$profileForm['id'],
    				$profileForm['avatar']
    				);
     
    		$this->embedForm('Profile', $profileForm);
    	}
    }
    ?>
    frontend/modules/register/templates/indexSuccess.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <h1>Inscription</h1>
     
    <?php echo $form->renderFormTag(url_for('register/index')) ?>
      <table>
        <?php echo $form ?>
      </table>
     
      <input type="submit" name="register" value="S'inscrire" />
    </form>
    lib/form/doctrine/ProfileForm.class.php
    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
    class ProfileForm extends BaseProfileForm
    {
      public function configure()
      {
    	//Variables spécifiques du formulaire.
    	$years = range(1940, 2020);
     
      	//Définition des règles des champs.
      	$this->widgetSchema['promo'] = new sfWidgetFormChoice(array('choices' => Doctrine::getTable('Profile')->getPromos(), 'expanded' => false, 'multiple' => false ));
      	$this->widgetSchema['sexe'] = new sfWidgetFormChoice(array('choices' => Doctrine::getTable('Profile')->getSexes(), 'expanded' => true, 'multiple' => false ));
      	$this->widgetSchema['anniversaire'] = new sfWidgetFormDate(array(
    									  'format' => '%day% - %month% - %year%',
    									  'years' => array_combine($years, $years)
    									)
    								  );
    	$this->widgetSchema['user_id'] = new sfWidgetFormInputHidden();
     
      	//Définition des règles de validations.
      	$this->validatorSchema['email'] = new sfValidatorEmail();
      	$this->validatorSchema['msn'] = new sfValidatorEmail(array('required' => false));
      	$this->validatorSchema['site'] = new sfValidatorUrl(array('required' => false));
      	$this->validatorSchema['anniversaire'] = new sfValidatorDate();
      	$this->validatorSchema['promo'] = new sfValidatorChoice(array('choices' => array_keys(Doctrine::getTable('Profile')->getPromos())));
      	$this->validatorSchema['sexe'] = new sfValidatorChoice(array('choices' => array_keys(Doctrine::getTable('Profile')->getSexes())));
    	$this->validatorSchema['user_id'] = new sfValidatorDoctrineChoice(array('model' => 'sfGuardUser', 'column' => 'id', 'required' => false));
     
      	//Définition des labels des champs.
      	$this->widgetSchema->setLabels(array(
      											'nom' => 'Nom',
      											'prenom' => 'Pr&eacute;nom',
      											'email' => 'Adresse E-mail',
      											'site' => 'Site Web',
      											'anniversaire' => 'Date de naissance',
      											'promo' => 'Fili&egrave;re/Promo',
      											'infos' => 'Biographie'
      									));
     
      }
    }
    lib/form/doctrine/sfDoctrineGuardPlugin/sfGuardUserForm.class.php
    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
    class sfGuardUserForm extends PluginsfGuardUserForm
    {
      public function configure()
      {
      	$this->widgetSchema['password'] = new sfWidgetFormInputPassword();
    	//Ajout du champs de confirmation du mot de passe.
    	$this->widgetSchema['password_confirmation'] = new sfWidgetFormInputPassword();
     
    	//Règles de validations.
    	$this->validatorSchema['password']->setOption('required', true);
    	$this->validatorSchema['password_confirmation'] = clone $this->validatorSchema['password'];
    	$this->mergePostValidator(new sfValidatorSchemaCompare('password', '==', 'password_confirmation',array(),array('invalid' => 'Les 2 mots de passes doivent correspondre !')));
     
    	//Labels.
    	$this->widgetSchema->setLabel('password_confirmation', 'Confirmez votre mot de passe');
     
    	//Placement.
    	$this->widgetSchema->moveField('password_confirmation', 'after','password');
     
      }
    }
    Voila si jamais quelqu'un a la solution, je suis prenneur.
    Merci d'avance
    -abL^

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Par défaut
    J'ai trouvé une solution ici ==> http://www.lexik.fr/sfblog/symfony/f...re-multiples-7

    Elle vaut ce qu'elle vaut mais elle marche.
    ++

  3. #3
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut
    Bonjour à tous,

    Alors j'ai perdu une journée de taff sur cette erreur ,
    alors s'il vous plais marqué mon post en résolu ou pas.

    Il ne faut pas mettre le nom de ta relation dans ton embedForm, sinon il va faire le double enregistrement. Et surtout ne pas devenir fou sur ta solution

    $this->embedForm('Profile', $profileForm); qui appel ta relation avec la table Profile.

    Voila merci derien

    Bon courage.

    Ps : je suis content j'ai cloturer un post de 2009 (* five minute alone *)

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

Discussions similaires

  1. requette pour les enregistrements en double
    Par colombe dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/07/2006, 12h28
  2. détecter les enregistrements en double (sur un champ)
    Par Phiss dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/07/2006, 16h59
  3. Réponses: 8
    Dernier message: 13/04/2006, 15h22
  4. formulaire: enregistrement en double/date now pb
    Par debdev dans le forum Access
    Réponses: 18
    Dernier message: 02/01/2006, 12h54
  5. [Forms] : enregistrement en double
    Par Aminos dans le forum Forms
    Réponses: 5
    Dernier message: 27/01/2005, 17h36

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