Сценарий YII: как?

Что если у меня есть поле ввода, например:

  • USEREMAIL:
  • UserPhoneNumber:
  • UserOldPasword:
  • UserNewPassword:
  • UserRetypePassword:

И при обновлении моего действия мне потребуется только UserNewPassword, если UserOldPassword не пуст, иначе необходимо обновить только UserEmail или UserPhoneNumber. Как я реализую это правило - только при обновлении? Или я должен создать собственный валидатор на моей модели?

поэтому на моем afterFind() у меня есть этот код, чтобы избежать вывода хэшированного пароля:

public function afterFind()
{
    //reset the password to null because we don't want the hash to be shown.
    $this->old_password = $this->password;
    $this->password = null;

    parent::afterFind();
}

и я создал пользовательскую проверку. он действительно проверяет, проблема в том, что даже если я отправил форму с пустым UserNewPassword, я все еще получаю сообщение об ошибке, и поле $this->password теперь возвращает хешированное значение из моей базы данных

Пожалуйста, посмотрите мой код и исправьте мои ошибки:

public function checkForEmpty($attribute,$params){
        if(!empty($this->$attribute)){
            if(empty($params['oldPassword'])){
                $this->addError('oldPassword','We require your old password to proceed changing password');
            }
            if(empty($params['retypePassword'])){
                $this->addError('retype_password','To assure that you type the right password please retype your password');
            }
            if(!empty($params['oldPassword']) && !empty($params['retypePassword'])){
                $this->compareOldPass($params['oldPassword'],$this->old_password);
            }
        }

    }

Заранее спасибо...

1 ответ

Решение

Вы можете сделать beforeSave() в вашей модели. Я думаю, что это лучшее решение из-за вашей сложной логики, а не из-за глобальной проблемы вашего приложения.

ОБНОВИТЬ:

public function beforeSave()
{
    if(parent::beforeSave())
    {
        //implement you logic here

        //or check it is a new record
        if($this->isNewRecord)
        { 
            // do stuff here if new 
        }

        //or you can return false if it doesn't meet your logic


        return true;
    }
    else
        return false;
}
Другие вопросы по тегам