Validierung von Parametern die zu keinem Objekt gehören

  • 0 x
    123 Beiträge
    0 Hilfreiche Beiträge
    24. 10. 2012, 09:48

    Hi,

    bisher hab ich nur validierungen gebraucht, die Eigenschaften eines Objekts betreffen. Was aber wenn ich Parameter valieren möchte, die keine Eigenschaften einen Objektes sind?

    Wie macht man das genau?

    Ich habe mal ein bisschen probiert. Ich habe wieder 2 Actions. New und Create. Die New Action zeigt mir das Formular an. Dort habe in den Annos @dontvaildate $username und @dontvalidate $password. Das Formular habe ich an kein Object gebunden, wie man es sonst mit object="{object}" macht.

    Ich übergebe meine Parameter nun an die Create Action. Dort hab ich in den Annos nun @validate $username StringLength(),...,... und dasselbe für Passwort angegeben.

    Wenn ich nun das Formular absende, ist mir aufgefallen, das Extbase zwar ne Fehlermeldung ausgibt, es werden aber bei den Feldern keine errorClass gesetzt.

    Hat einer bereits Erfahrungen damit gemacht und kann mir erklärten wie ich nicht Objekt Eigenschaften richtig validere?

    Das wäre super nett. Vielen Dank, Stefan


  • 1
  • kainobi kainobi
    Jedi-Ritter
    0 x
    141 Beiträge
    0 Hilfreiche Beiträge
    24. 10. 2012, 10:05

    Soweit ich im Quellcode erkennen kann, wird die errorClass nur gesetzt, wenn es sich um das Property eines Models handelt und ein form object vorhanden ist.

    Siehe:
    Tx_Fluid_ViewHelpers_Form_AbstractFormFieldViewHelper::setErrorClassAttribute() und Tx_Fluid_ViewHelpers_Form_AbstractFormFieldViewHelper::getMappingResultsForProperty() bzw. Tx_Fluid_ViewHelpers_Form_AbstractFormFieldViewHelper::getErrorsForProperty()

  • Coreblade Coreblade
    R2-D2
    0 x
    96 Beiträge
    0 Hilfreiche Beiträge
    07. 11. 2012, 16:33

    Hallo

    Einen eigenen Validator schreiben diesen mit @validate angeben und im Validator alle nötigen Felder prüfen und den Feldern per Jquery die Error klasse zuweisen. Nicht besonders elegant, erfüllt aber den Zweck...

    Code Validator:

    1. public function isValid($deinObjekt) {
    2. $notEmptyValidator = new Tx_Extbase_Validation_Validator_NotEmptyValidator();
    3. $this->errors = array();
    4. $hasErrors = False;
    5. $setCssFields = "";
    6.  
    7. if (!$notEmptyValidator->isValid($deinObjekt->GetDeinFeld())) {
    8. $hasErrors = True;
    9. $this->errors['DeinFeld'] = new Tx_Extbase_Validation_PropertyError("DeinFeld " ) ;
    10. $this->errors['DeinFeld']->addErrors(array(new Tx_Extbase_Validation_Error('The given subject was empty.', 1221560718 ) ) ) ;
    11. $setCssFields .= "$('input[name=\"tx_deineExtension[bla][bla]\"]').addClass('f3-form-error') ; " ;
    12. }
    13.  
    14. // Errors ausgeben (Felder markieren)
    15. if ($hasErrors) {
    16. // Hack Validate Childobjects in Extbase... Klasse halt selber setzen...
    17. $GLOBALS['TSFE']->additionalHeaderData['tx_deineExtension'] = "<script> $(document).ready(function() { " . $setCssFields . " });</script>";
    18. return False;
    19. }
    20. return True;
    21. }

    Oder einfachere Variante: Du erstellst ein Model welches genau deinen Formularfeldern entspricht und befüllst dieses. Dann funktioniert es von Haus aus. Bei mir war das Problem für Childobjekte zu Validieren...

    Gruss Coreblade

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    08. 11. 2012, 12:24

    Error Class gibts nur wenn ein object an das Formular gebunden ist. Könnte man aber wahrscheinlich ändern... Meines Wissens ist das sogar schon in Arbeit (bis es dann in Extbase verfügbar ist, dauert es aber sicher noch ein Weilchen).

    Ich würde auch vorschlagen ein "Data Transfer Object" einzusetzen, d.h. ein Model, das selbst nicht gespeichert wird und nur dazu dient diese Daten zu bündeln.

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • 1