我在使用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;
}
}
?>
答案 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()向用户显示错误。