我搜索了很多,尝试了书中的每一个技巧,但我仍然无法让我的CakePHP应用程序执行简单的密码确认验证。我已经尝试过创建这样的自定义验证规则:
'passwordequal' => array('rule' => 'checkpasswords' , 'message' => 'Passwords Do Not Match')
然后定义'checkpasswords',如下所示:
public function checkpasswords(){
if(strcmp($this->data['User']['new_password'],$this->data['User']['confirm_password']) == 0 )
{
return true;
}
return false;
}
'new_password'和'confirm_password'是密码输入字段。这没用。然后我尝试了一个我在其中散列'confirm_password'。那也行不通。我还有其他没有经过验证的“规则”,比如'notempty',我认为这是标准的CakePHP规则之一。任何人都可以帮忙。我知道这个问题已被问过几次,但这些解决方案都没有对我有用。 CakePHP文档也没有多大帮助。
答案 0 :(得分:15)
视图文件中的两个字段
echo $this->Form->input('password');
echo $this->Form->input('repass');
模型文件
<?php
class Post extends AppModel {
public $validate = array(
'repass' => array(
'equaltofield' => array(
'rule' => array('equaltofield','password'),
'message' => 'Require the same value to password.',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
'on' => 'create', // Limit validation to 'create' or 'update' operations
)
)
);
function equaltofield($check,$otherfield)
{
//get name of field
$fname = '';
foreach ($check as $key => $value){
$fname = $key;
break;
}
return $this->data[$this->name][$otherfield] === $this->data[$this->name][$fname];
}
}?>
答案 1 :(得分:0)
似乎您的模型未正确加载并使用动态生成的模型。
比较2.x中的密码只不过是比较任何两个字段,因为蛋糕不再自动散列pw。
您是否可以确认您的验证方法正在运行,如果notEmpty
之类的简单内容无法正常运行,则可能并非如此。