我的用户模型中有一些验证检查电子邮件地址是唯一的,电子邮件地址是否格式化为电子邮件等。
特别是对于登录表单,我确实想验证电子邮件字段是否填写了正确的电子邮件地址但我不想激发唯一规则。我尝试添加'on'=> “创建”到唯一规则,但所有验证仍然会触发。
这就是我在我的模型中所拥有的:
public $validate = array (
'email' => array(
'email' => array(
'rule' => 'email',
'required' => 'create',
'allowEmpty' => 'false'
),
'isUnique' => array(
'rule' => 'isUnique',
'on' => 'create',
'message' => 'This email address already exists in the database. Would you like to login?'
)
);
这是在控制器的登录功能中:
if ($this->User->validates(array('fieldList' => array('email', 'password')))) {
// do login, redirect etc.
}
这是我的观点
<?php echo $this->Form->create('User'); ?>
<fieldset>
<legend><?php echo __('Please enter your email address and password'); ?></legend>
<?php
echo $this->Form->input('email');
echo $this->Form->input('password');
?>
</fieldset>
<?php echo $this->Form->end(__('Login')); ?>
如何让cakePHP识别某些验证规则不应针对某些操作触发而不必“取消设置”规则。
如果我最终不得不取消规则,我是否必须重新设置才能将其发射到应该触发的地方,或者是否仅在行动期间有效?
谢谢!
答案 0 :(得分:0)
方法1:
在验证数据之前,只需删除电子邮件的验证isUnique
。
这些是通过取消设置验证数组键来删除验证的可能方法。
$this->User->validator()->remove('email', 'isUnique');
<强>(OR)强>
$validator = $this->User->validator();
unset($validator['email']['isUnique']);
然后在此验证数据。
if ($this->User->validates(array('fieldList' => array('email', 'password')))) {
// do login, redirect etc.
}
有关详情,请查看here以删除验证。
方法2:
您也可以进行如下验证。
只需在User model
中创建一个函数即可验证登录表单
用户模型
public function loginValidate() {
$validate1 = array (
'email' => array(
'rule' => 'email',
'message' => 'please enter email.'
),
'password' => array(
'rule' => 'notEmpty',
'message' => 'please enter password.'
)
);
$this->validate = $validate1;
return $this->validates();
}
用户控制器
public function login() {
if ($this->User->loginValidate()) {
// do login, redirect etc.
}
}
我希望这会对你有所帮助。