我已经在CakePHP书籍/ API和StackOverflow上搜索了网络,但似乎无法找到答案。我遇到的问题是用户为我正在构建的应用创建。我在我的控制器中添加了一些操作的密码验证规则,这些规则工作得很好 - 没有任何问题,甚至Auth组件也很开心。我创建了一个与我的数据模型完美配合的change_password动作(就像in - changes实际发生的那样),但是没有验证应用于它,即使我将表单字段命名为与add动作完全相同。许多操作的CakePHP验证规则
多个操作可以不共享相同的验证吗?我是否需要在change_password动作中稍微重命名我的表单ID,然后创建新的验证变量以匹配这些变量?这对我来说似乎效率很低,但如果我必须走下这条路,我会的。
非常感谢! John
编辑,现在添加代码片段,因为它看起来合适。
首先行动:
function change_password($id = null) {
if (!empty($this->data)) {
if (!empty($this->data['User']['passwd'])) {
$this->data['User']['password'] = $this->Auth->password($this->data['User']['passwd']);
}
if ($this->User->save($this->data)) {
$this->Session->setFlash('Password has been changed');
$this->redirect(array('controller' => 'bookings', 'action' => 'index'));
} else {
$this->Session->setFlash('Password could not be changed');
}
}
现在,验证规则(再次指出的是,这些工作完全为我添加动作,他们只是无法在change_password):
var $validate = array(
'first_name' => array(
'notempty' => array('rule' => array('notempty')),
),
'last_name' => array(
'notempty' => array('rule' => array('notempty')),
),
'email' => array(
'email' => array('rule' => array('email')),
),
'group_id' => array(
'numeric' => array('rule' => array('numeric')),
),
'active_user' => array(
'boolean' => array('rule' => array('boolean')),
),
'passwd' => array(
'rule' => array('minLength', '6'),
'message' => 'Password should be at least 6 characters long',
'required' => true,
'allowEmpty' => false,
'on' => 'create'
),
'passwd_confirm' => array(
'rule' => 'matchpwd',
'message' => 'Confirm password doesnt match'
),
);
function matchpwd($data){
if ($this->data['User']['passwd'] != $data['passwd_confirm']) {
return false;
}
return true;
}
最后,视图(虽然我不认为增加这个会有帮助,但我仍然会将它包括在内):
<div class="users form">
<?php echo $form->create('User', array('action'=>'change_password'));?>
<fieldset>
<legend><?php __('Change Password for "'.$User_to_change.'"');?></legend>
<?php
echo $form->input('id');
echo $form->input('passwd', array(
'type' => 'password')
);
echo $form->input('passwd_confirm', array(
'type' => 'password')
);
?>
</fieldset>
<?php echo $form->end('Submit');?>
</div>
我在下面的答案中引用了验证,似乎是“半路工作”。当我尝试在“passwd”表单域中输入密码但将“passwd_confirm”留空时,控制器的保存操作失败,并看到“密码无法更改”的闪存信息。所以显然它在我的验证规则中运行matchpwd函数。但是,为这两个框输入空白值会成功,因此就好像它失败了其他验证规则。
(请原谅我,如果代码缩进没有出现正常。正如你所看到的,我有点StackOverflow上的n00b的)
糟糕!忘记说明我正在使用cakePHP版本1.3。如果它有帮助,我会提供代码片段,但在这一点上,这更多的是一个理论问题:可以将验证规则应用于多个操作? – SnoConeGod 2011-05-13 16:01:20