1

たとえば、入力フィールドがある場合:

  • ユーザーの電子メール:
  • ユーザーの電話番号:
  • ユーザー旧パスワード:
  • ユーザーの新しいパスワード:
  • ユーザー再入力パスワード:

また、アクションの更新では、UserOldPassword が空でない場合にのみ UserNewPassword を要求します。それ以外の場合、更新する必要があるのは 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);
            }
        }

    }

前もって感謝します...

4

1 に答える 1

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;
}
于 2013-09-25T13:15:27.250 に答える