我为我的用户模型处理了以下验证码。它在创建用户时效果很好,但是在更新时它不起作用。我知道'on' => 'create'
,但我希望规则也适用于编辑期间。我允许用户更改其用户名,但如果用户将其更改为已在Db中,则应拒绝提交。
var $validate = array(
'username' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'message' => 'Usa letras ou numeros como o teu << Usuario >>',
),
'between' => array(
'rule' => array('between' , 5, 15),
'message' => 'O << Usuario >> tens que ter entre 5 a 15 letras/numeros',
),
'isUnique' => array(
'rule' => 'isUnique',
'message' => 'O << Usuario >> que escolhestes ja foi utilizado. Escolhe um outro.'
)
)
);
由于用户需要登录才能访问“编辑”页面,因此可以创建自定义验证规则:
由于
检查
答案 0 :(得分:2)
我能够使用以下方法修复我的问题:
var $validate = array(
'username' => array(
'third' => array(
'rule' => array('checkUniqueName'),
'message' => 'O << Usuario >> que escolhestes ja foi utilizado. Escolhe um outro.'
)
),
'email' => array(
'second' => array(
'rule' => array('checkUniqueEmail'),
'message' => 'Este email ja foi registado anteriormente. Contacta-nos se foi por engano'
)
)
);
function checkUniqueName($data) {
$isUnique = $this->find(
'first',
array(
'fields' => array(
'User.id',
'User.username'
),
'conditions' => array(
'User.username' => $data['username']
)
)
);
if(!empty($isUnique)){
if($this->authUserId == $isUnique['User']['id']){
return true; //Allow update
}else{
return false; //Deny update
}
}else{
return true; //If there is no match in DB allow anyone to change
}
}
function checkUniqueEmail($data) {
$isUnique = $this->find(
'first',
array(
'fields' => array(
'User.id'
),
'conditions' => array(
'User.email' => $data['email']
)
)
);
if(!empty($isUnique)){
if($this->authUserId == $isUnique['User']['id']){
return true; //Allow update
}else{
return false; //Deny update
}
}else{
return true; //If there is no match in DB allow anyone to change
}
}
答案 1 :(得分:1)
如果未为验证规则指定“on”键,或者将其设置为null,则该规则将同时应用于1.3和{{ 3}}手册:
'on'键可以设置为以下任一值:'update'或'create'。这提供了一种机制,允许在创建新记录期间或更新记录期间应用某个规则。
如果规则已定义'on'=&gt; 'create',规则只会在创建新记录时强制执行。同样,如果它被定义为'on'=&gt; '更新',只会在更新记录时强制执行。
'on'的默认值为null。当'on'为null时,将在创建和更新期间强制执行该规则。
您提供的代码也应在编辑表单上进行验证,只要您确保在表单上包含登录用户的ID即可。例如:
<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->hidden('id', array('value' => AuthComponent::user('id'))); ?>
<?php echo $this->Form->input('username'); ?>
<?php echo $this->Form->end('Update Username'); ?>
如果表单是创建用户表单,则不会包含隐藏的ID字段。