Ich habe ein SymfonyForm, das 1: n embedForm (s) hat. Das Hauptformular und die embedForm-Klasse haben ihre eigene PreValidation, die eine bedingte Validierung implementiert. Ein Teil der EmbedForm Klasse sieht wie folgt aus:PreValidation in Symfony 1.4 für embedForm mit 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();
}
Die Prävalidierung der Hauptform ähnlich ist.
Wenn ich das Formular abschicke, funktioniert die Vorvalidierung des Hauptformulars einwandfrei.
Im embedForm des „SOME_FIELD“ erhält, einen erforderlichen Validierung-Fehler, obwohl ich es explizit setOption Satz (‚erforderlich‘, false) im Prävalidierung des embedForm.
Gibt es etwas, was ich berücksichtigen muss, wenn ich die Vorvalidierung in einer EmbedForm verwende? Was ist mit mergePreValidator? Irgendwelche Hinweise dazu?
Vielen Dank im Voraus!
Vielen Dank für Ihre Erklärungen ... – hasentopf
Das wird nicht in meiner Formklasse Top-Level helfen? foreach ($ this-> getEmbeddedForm ('my_embeded_forms')) -> getEmbeddedForms() als $ form_id => $ form) { $ this-> mergePreValidator ($ form-> getValidatorSchema()); } ??? – hasentopf
Nein, sfForm :: embedForm führt die Schemas bereits in den Code ein, den ich oben eingefügt habe. Die preValidators FEHLEN, sie ändern einfach die falsche Validator-Instanz. –