L'habitude avec symfony est de placer les validateurs sur les champs individuellement, mais il est arrivé que je dois placer un validateur qui porte sur plusieurs champs. D'abord mon schema:
Bon, il s'agit de voter pour des pétitions, et chaque pétition, chaque membre n'a droit qu'à un seul vote. Lors de la soumission du formulaire, il s'agit de vérifier que le membre n'a pas déjà voté pour la pétition en cours. J'ai pensé à sfValidatorDoctrineUnique en faisant ceci:
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
17vote: actAs: Timestampable: columns: petition_id: type: integer notnull: true sf_guard_user_profile_id: type: integer relations: petition: local: petition_id foreign: id sfGuardUserProfile: local: sf_guard_user_profile_id foreign: id
Mais ça n'a pas marché. Pourriez vous me donner des idées sur comment valider mon formulaire ? merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $this->setWidgets(array( 'petition_id' => new sfWidgetFormInputHidden(), 'sf_guard_user_profile_id' => new sfWidgetFormInputHidden(), )); $this->setValidators(array( 'petition_id' => new sfValidatorAnd(array( new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('petition'), 'required' => true)), new sfValidatorDoctrineUnique(array('model' => 'vote', 'column' => array('petition_id', 'sf_guard_user_profile_id'))), )), 'sf_guard_user_profile_id' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('sfGuardUserProfile'), 'required' => true)), ));
Partager