Ich habe eine Profile
Formular, das erbt von sfGuardRegisterForm
Ich habe diese Felder:
$this->useFields(
array('first_name',
'last_name',
'email_address',
'country',
'language',
'current_password',
'new_password',
'password_again',
)
);
Erforderliche Felder sind:
email_address
, country
y language
Und die Bedingungen sind:
- Wenn die
email_address
ist nicht gleich dem aktuellenemail_address
dann prüfen, ob es sich um einzigartig dann speichern Sie es - Wenn die
current_password
das tatsächliche Passwort des Benutzers ist, dann prüfen Sie, obnew_password
ypassword_again
gleich sind, und überprüfen Sie, ob dienew_password
nicht mit dem tatsächlichen Passwort des Benutzers übereinstimmt
Ich kann nur nicht herausfinden, wie ich das umsetzen soll.
EDIT
Danke 1ed Ihr Beispiel funktioniert, aber das Problem ist, dass ich das Benutzerprofil lade und die Felder ausfülle: 'first_name', 'last_name', 'email_address', 'country', 'language'
mit dem aktuell angemeldeten Benutzer, so dass die email_address
Feld wird die E-Mail-Adresse angezeigt:
//...
$this->widgetSchema['email_address']->setDefault($this->_user->getEmailAddress());
//...
Wenn der Benutzer die E-Mail nicht ändert, wird diese Meldung immer angezeigt:
Ein Objekt mit der gleichen "email_address" existiert bereits.
Ich möchte das einfach überspringen
Auch diese $this->getObject()->checkPassword()
nicht funktioniert, wird immer diese Meldung angezeigt:
Falsches aktuelles Passwort.
Ich benutze:
$this->_user = sfContext::getInstance()->getUser()->getGuardUser();
So erhalten Sie das aktuelle Benutzerprofil
EDIT2
Nochmals vielen Dank 1ed
Das ist sehr seltsam und ich bin frustriert, das ist die Situation
- Ich habe einen "Workaround" für dieses Problem, aber er entspricht nicht dem Standard. Ich kann das Problem lösen, indem ich
sfContext::getInstance()->getUser()->getGuardUser();
und es wird mehr unnötiger Code sein - Wenn ich die
new ProfileForm($user)
füllt automatisch alle Felder aus, das ist sehr gut sondern Ich kann nichtsetDefault()
Ich kann nicht einstellennull
oempty
irgendein Feld, so dass ich nicht verwenden kanndoUpdateObject()
weil diese Funktion nur funktioniert, wenn die aktuellen Daten aktualisiert werden, außerdem habe ich getestet, dass die Funktionbind()
,save()
usw. ohne Ergebnis