【发布时间】:2011-05-13 16:00:39
【问题描述】:
我在网上搜索了 cakePHP 书/API 和 StackOverflow,但似乎找不到答案。我遇到的问题是为我正在构建的应用程序创建用户。我的控制器中有用于添加操作的密码验证规则,这些规则运行良好 - 没有任何问题,甚至 Auth 组件也很高兴。我创建了一个与我的数据模型完美配合的 change_password 操作(如 - 实际发生更改),但没有对其应用验证,即使我将表单字段命名为与添加操作完全相同。
多个操作不能共享相同的验证吗?我是否必须在 change_password 操作中稍微重命名我的表单 ID,然后创建新的验证变量来匹配这些?这对我来说似乎效率很低,但如果我必须走那条路,我会的。
非常感谢!! 约翰
编辑,现在添加代码 sn-ps,看起来合适。
首先是动作:
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 版。如果有帮助,我会提供代码 sn-ps,但这更多是一个理论上的问题:验证规则可以应用于多个操作吗?
标签: cakephp validation