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:
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
 
vote: 
  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
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
$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)),
    ));
Mais ça n'a pas marché. Pourriez vous me donner des idées sur comment valider mon formulaire ? merci.