J'ai une SymfonyForm qui a 1: n embedForm (s). La forme principale et la classe embedForm ont leur propre PreValidation, qui implémente une validation conditionnelle. Une partie de la classe embedForm ressemble à ceci:PreValidation dans Symfony 1.4 pour embedForm avec sfValidatorCallback
private function configurePreValidators() {
$validator = new sfValidatorCallback(array('callback'=> array($this, 'preValidation')));
$this->getValidatorSchema()->setPreValidator(new sfValidatorOr(array($validator)));
}
public function preValidation(sfValidatorCallback $validator, array $values){
...
$this->getValidator(self::SOME_FIELD)->setOption('required', false);
...
}
public function configure() {
...
$this->configurePreValidators();
parent::configure();
}
Le prévalidation de la forme principale est similaire.
Lorsque je soumets le formulaire, la prévalidation de la forme principale fonctionne correctement.
Dans le embedForm le « un_champ » obtient une validation d'erreur nécessaire, bien que je l'ai mis explicitement setOption (« nécessaire », false) dans la prévalidation du embedForm.
Y at-il quelque chose que je dois prendre en compte lorsque j'utilise la pré-validation dans un embedForm? Qu'en est-il de mergePreValidator? Des indices à ce sujet?
Merci d'avance!
Merci pour vos explications ... – hasentopf
Cela ne va pas aider dans ma classe de forme de haut niveau? Foreach ($ this-> getEmbeddedForm ('mes_membres_membrées') -> getEmbeddedForms() as $ form_id => $ form) { $ this-> mergePreValidator ($ form-> getValidatorSchema()); } ??? – hasentopf
Non, sfForm :: embedForm est déjà en train de fusionner les schémas dans le code que j'ai collé ci-dessus. Les préValidateurs sont en train de modifier simplement la mauvaise instance de validateur. –