1

我在使用 cakePhp 2.x 创建的网站中遇到问题,当我尝试注册帐户时,我的表单检查了我的所有字段规则,并且 beforeSave 加密了密码,但在使用确认检查密码(MatchPassword)之前加密了密码密码,然后返回两个密码不相等的错误,因为密码是 40 个字符的密码。

这是我的模型代码,我该如何解决这个问题?

<?php
    //questo modello interessa lòa tabella User
    class User extends AppModel{
        public $name = 'User'; //non utilizzata nel sito è il nome del modello alla fine per migliorare la compatibilità

        public $validate = array(

            'password' => array(
                'non_vuoto' => array(
                    'rule'=> 'notEmpty',//non è vuoto metodo che eredito da appmodel
                    'message'=> 'La password non può essere vuota'  
                ),
                'min_lunghezza' => array(
                    'rule' => array('minLength',5),
                    'message' => 'La password deve contenere almeno 5 caratteri'
                ),
                'max_lunghezza' => array(
                    'rule' => array('maxLength',15),
                    'message' => 'La password deve contenere al massimo 15 caratteri'
                ),
                'password_uguale' => array(
                    'rule' => 'matchPasswords',
                    'message' => 'Not equal password'
                )
            ),
            'password_confirm' => array(
                'non_vuoto' => array(
                    'rule'=> 'notEmpty',//non è vuoto metodo che eredito da appmodel
                    'message'=> 'La password non può essere vuota'  
                )           
            )
        );


        public function matchPasswords($data){

            if ($data['password']==$this->data['User']['password_confirm']){
                return true;
            }

            $this->invalidate('password_confirm','Le due password non coincidono');
            return false;
        }


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

    }
?>
4

1 回答 1

2

我有一个类似的问题——我不确定这是否正是你所要求的——但我需要在应用 beforeSave() 规则之前验证我的模型。

我发现 CakePHP's Validating Data from the Controller页面很有帮助。基本上,您设置数据

$this->ModelName->set($this->request->data);

然后你可以检查模型的 validates() 方法......

if ($this->ModelName->validates()) { // ...

然后,您可以决定是保存模型还是使用 $this->Session->setFlash() 向用户显示错误。

于 2013-08-13T19:44:58.097 回答