Zum Inhalt springen

Einzelne Model Elemente nicht validieren

Erstellt am 3. Februar 2014 · 5 Antworten · letzte Antwort am 6. Februar 2014

Tags: Frage

shaak ·

Ich habe ein Benutzer Model, das unter anderem das Feld email enthält.
Jetzt hab ich eine Action, in der das Passwort geändert wird.

Rufe ich diese nun auf, wird auch das Feld email validiert, obwohl es gar nicht im Formular stand und der email Validator wirft nun den Fehler, das es diese E-Mailadresse schon gibt in der Datenbank. Wie kann ich diesen Validator nun aus der Validierung ausschließen?
So geht es nicht

/**
     * action updatePw
     *
     * @param Tx_ExtName_Domain_Model_Benutzer $benutzer
     * @dontvalidate $email
     * @return void
     */
    public function updatePwAction(Tx_CuroStellenboerse_Domain_Model_Benutzer $benutzer)
    {
        // passwort ändern
    }
Schweriner ·

Schau mal im Model der Benutzer in der Variablendeklaration der Klasse. Was für Annotations hat dort die Variable email?

shaak ·

Das sieht so aus:

    /**
     * @var string
     * @validate EmailAddress
     * @validate Tx_ExtName_Validation_Validator_UserExistValidator
     */
    protected $email = '';
Schweriner ·

Also im Prinzip ist die E-Mail Adresse ja für das Updaten des Passworts nicht von belangen. Wenn Du beim Abschicken der Form die updatePwAction aufrufst braucht diese ja nur den Benutzer als Parameter. Ich denke @dontvalidate $email macht bei deiner Action keinen Sinn. @dontvalidate $benutzer könnte vielleicht den Fehler beheben, aber dann musst Du den Benutzer in der Action nochmal validieren.

shaak ·

Genau das ist ja der Punkt.
Klar könnte ich jetzt in der Action die Felder die ich validieren will, manuell validieren, also z.B. ob das neue Passwort >8 Zeichen ist, aber eigentlich wird sowas doch genau in einem Validator gemacht, oder?

Oder kann ich auch in der Action nochmal einen Validator aufrufen?

Velletti ·

wir haben das so gelöst:

usermodel->
-> EmailModel
-> passwordModel
-> AdressModel
-> moreSettingsModel

Dann gibt es 4 getrennte Formulare, in denen die einzelnen SUB - Modelle verändert werden. gespeichert wird immer das ganze UserModel :

in deinem fall :

function saveNewPasswordAction(tx_extbase...Model  $passwordModel )
  $ChangedUserModell = $thisUser
  $ChangedUserModell->setPasswordModel( $passwordModel ) ;
  $ChangedUserModell->update();