2

パスワードフィールドの更新中は非表示になり、パスワード検証は「6〜15」文字であるという条件付き検証が必要です。そのため、パスワードはデータベースにハッシュ形式で保存されるため、更新できません。私のモデルコードは以下の通りです、

<?php
class User extends AppModel {

    public $belongsTo = array(
        'Group',
        'City',
        'Area',
    );

    public $validate = array(
        'name' => array(
            'rule'     => 'alphaNumeric',
            'required' => true,
            'message'  => 'Only alphabets and numbers are allowed!'
        ),
        'email' => array(
            //~ 'rule1' => array(
                //~ 'rule' => 'isUnique',
                //~ 'message' => 'Email address already exists!',
                //~ 'last' => true
            //~ ),
            'rule2' => array(
                'rule' => 'email',
                'message' => 'Invalid Email!',
                'last' => true
            )
        ),
        //~ 'password' => array(
                //~ 'rule'    => array('between', 6, 15),
                //~ 'required' => true,
                //~ 'message' => 'Password must be of 6 to 15 characters'
        //~ ),
        //~ 'confirm_password' => array(
            //~ 'rule' => 'confirmPassword',
            //~ 'message' => 'Confirm password do not match!'
        //~ ),
        //~ 'address' => array(
            //~ 'allowEmpty' => false,
            //~ 'required' => true,
            //~ 'message'  => 'Description is required'
        //~ ),
        //~ 'phone_number' => array(
            //~ 'rule' => 'phone',
            //~ 'allowEmpty' => false,
            //~ 'required' => true,
            //~ 'message'  => 'Phone Number is required'
        //~ )
    );

    public function beforeSave() {
        if (isset($this->data[$this->alias]['password'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
        }
        return true;
    }

    public function confirmPassword() {
        debug('model');
        if ($this->data[$this->alias]['confirm_password'] != '') {
            debug('model in');
            if(strcmp($this->data[$this->alias]['password'], $this->data[$this->alias]['confirm_password']) == 0) {
                debug('model in in');
                return true;
            }
        }
        return false;
    }

}

私はまた、パスワードの検証を確認しています。条件付き検証の解決策を教えてください!助けてくれてありがとう!

4

1 に答える 1

6

保存する前に、複数の検証アレイを作成し、使用するアレイを選択できます。

モデル内:

public $validate = array(
   // default validation rules
);

public $validateWithPassword = array(
   // validation rules including password validation
);

これで、コントローラーアクションで、次のパスワードフィールドを使用して検証することを選択できます。

$this->User->validate = $this->User->validateWithPassword;
于 2012-11-07T15:14:19.657 に答える