Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 17h23   #1
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
Par défaut tester les PostValidateurs

Bonjour,
dans un formulaire j'ai créer un postValidateur, en dev et en prod il marche parfaitement.
Par contre quand je lance des tests il reviennent tjs positifs.

Explication:
1/ les user doivent suivre une formation
2/ plusieurs dates sont possibles mais ils ne doivent s'inscrire qu'a une seule

j'ai donc créer un postvalidateur qui check et ça marche en dev et prod.

Par contre en test, je peut sans problème inscrire une même personne plusieurs fois !!!
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 18h16   #2
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
Ton problème devrais peut être venir de ta base de données par exemple il enregistre jamais les formations sélectionné.

Dans ton cas tu as seulement la BDD qui change alors il y a de grande chance que tu es une erreur Mysql regarde les logs tu auras la réponse.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 21h16   #3
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
ce n'est pas un probléme sql.

mon schema:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
session:
  columns:
    name: string(50)
    description: string(255)
 
session_date:
  columns:
    session_id: integer
    date: date
    max: integer
  relation:
    session:
      local: session_id
 
inscription:
  columns:  
    user_id: integer
    session_date_id: integer
  relation:
    sfguarduser:
       local: user_id
    session_date:
      local session_date_id
l'idée est qu'un user ne peut s'inscrire qu'a une session donc j'ai créer un postvalidator qui check si pour l'ensemble des session_date d'une session je n'ai pas déjà ce user.

le postvalidator fonctionne parfaitement en dev & prod par contre en test, je peut sans problème inscrire une personne 2 fois pour la même session.
et j'ai bien 2 enregistrements dans la table inscription donc aucune erreur sql
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h48   #4
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
Réellement si tu n'as pas de problème avec le sql alors tu as dut faire une test sur l'environnement en amont ce qui fait que tu ne passe pas dans ton postvalidator().

Je ne vois que ça, les forms ne sont pas impacté par les environnements donc ça fonctionne sur un environnement alors ça fonctionne sur tous.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h04   #5
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
hu comprend pas trop

au cas ou, voila mon postvalidator:
Code :
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
 
public function configure()
  {
      .....
 
      //add a post validator
      $this->validatorSchema->setPostValidator(new sfValidatorAnd(
              array(
                new sfValidatorCallback(
                        array('callback'=> array($this, 'checkMaxInscrit'))),
                new sfValidatorCallback(
                        array('callback'=> array($this, 'checkdejaInscrit')))
              )));
 
  }
 
public function checkdejaInscrit($validator, $values)
  {
      $formation_session_info=  Doctrine_Core::getTable('formation_session_info')->find($values['formation_session_info_id']);
      $formation_session=$formation_session_info->getFormationSession();
 
      foreach($formation_session->getListDate() as $formation_session_info)
      {
          foreach($formation_session_info->getListInscrit() as $inscrit)
          {
              if($inscrit->getUserId()==$values['user_id'])
                      throw new sfValidatorError($validator, 'déjà inscrit a cette session');
          }
      }
      return $values;
 
  }
et mon test:
Code :
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
 
$browser->info('5- Post new inscription')->
        info('5.1 Submit an inscription')->
        get('/formation_session_inscription/new/')->
        with('request')->begin()->
            isParameter('module','formation_session_inscription')->
            isParameter('action','new')->
        end()->
 
        click('Save', array('formation_session_inscription'=>array(
            'formation_session_info_id' => 1,
            'user_id' => $user->getId(),
        )))->
        with('request')->begin()->
            isParameter('module','formation_session_inscription')->
            isParameter('action', 'create')->
        end() 
        ->call('/formation_session_inscription', 'GET', array())
        ->with('request')->begin()
            ->isParameter('module', 'formation_session_inscription')
            ->isParameter('action', 'index')
        ->end()
        ->with('response')->begin()
            ->isStatusCode(200)
        ->end()
  ;
code que j'ai juste dupliqué pour voir s'il me sortait une erreur
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h19.


 
 
 
 
Partenaires

Hébergement Web