保存前的cakePHP验证数据

时间:2012-06-09 10:30:53

标签: php cakephp-2.1

我在使用cakePhp 2.x创建的网站中遇到问题,当我尝试注册帐户时,我的表单会检查我的所有字段规则并在之前保存密码,但在检查密码之前加密密码(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;
        }

    }
?>

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题 - 我不确定它是完全你问的是什么 - 但我需要在应用beforeSave()规则之前验证我的模型。

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

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

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

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

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