Ich werde gerade echt sauer… Ich bekomme es nicht gebacken mit Szenarien zu arbeiten. Und zwar habe ich eine Benutzerverwaltung und die folgenden Regeln für das User-Model definiert:
public function rules()
{
return array(
array('username, password, password_repeat', 'required'),
array('username', 'unique', 'caseSensitive' => 'false'),
array('username', 'length', 'min'=>3, 'max'=>10),
array('password', 'compare', 'compareAttribute'=>'password_repeat', 'on'=>'create'),
array('password', 'length', 'min'=>5, 'max'=>32, 'on'=>'create'),
array('password', 'checkUpdatedPassword', 'on'=>'update'),
array('email', 'length', 'min'=>5, 'max'=>50),
);
}
/**
* Diese Methode dient dem Vergleich des Passworts, wenn diese geändert
* wird.
**/
public function checkUpdatedPassword($attribute, $params)
{
if(!$this->hasErrors()) // we only want to authenticate when no input errors
{
// Prüfen, ob das Passwort leer ist, denn dann muss keinerlei
// Prüfung erfolgen, außer, dass eben die Confirm-Eingabe auch leer
// ist
if ($this->password == '') {
// Prüfen, ob das Confirm-Passwort auch leer ist
if ($this->password_repeat != $this) {
$this->addError('password', 'Both inputs for password have to be empty.');
}
} else {
// Prüfen, ob beide Passwörter identisch sind
if ($this->password != $this->password_repeat) {
$this->addError('', '');
}
}
}
}
public function safeAttributes()
{
return array('username', 'password', 'password_repeat', 'email');
}
Die Methoder checkUpdatedPassword wird aber nie ausgeführt. Das Problem ist wohl der “on”-Wert und ich denke, dass ich da einen Gedankenfehler drin habe.
wenn ich nun zB. die folgende URL habe, dann ist doch des nach dem Slash das Szenario, oder?
http://www.eine-url…p?r=user/create
d.h. ich hätte automatisch ein Update- und Create-Szenario? Oder stimmt das so nicht? oO Wenn nein, wie muss ich das dann machen?