Validation cakephp在字段上的唯一性验证
我正在与cakephp合作。我需要在电子邮件字段中添加三个验证。第一次验证(如果未提供电子邮件),第二次验证有效电子邮件地址,第三次验证(如果提供电子邮件地址),则电子邮件地址应是唯一的。因为这是一张报名表 如何在一个字段上添加三个验证我尝试使用以下代码,但它对我不起作用Validation cakephp在字段上的唯一性验证,validation,cakephp,Validation,Cakephp,我正在与cakephp合作。我需要在电子邮件字段中添加三个验证。第一次验证(如果未提供电子邮件),第二次验证有效电子邮件地址,第三次验证(如果提供电子邮件地址),则电子邮件地址应是唯一的。因为这是一张报名表 如何在一个字段上添加三个验证我尝试使用以下代码,但它对我不起作用 public $validate = array( 'email' => array( 'email' => array( 'rule' =&
public $validate = array(
'email' => array(
'email' => array(
'rule' => array('email'),
'message' => 'Invalid email address',
'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
)
),
'email' => array(
'rule' => 'isUnique',
'message' => 'Email already registered'
)
);
您有两个相同的索引“email”,PHP不允许您使用。改为:-
array(
'email' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'Provide an email address'
),
'validEmailRule' => array(
'rule' => array('email'),
'message' => 'Invalid email address'
),
'uniqueEmailRule' => array(
'rule' => 'isUnique',
'message' => 'Email already registered'
)
)
);
否则,将只使用您的一条规则。您使用什么版本的Cakephp 因为我认为如果你使用2.3,它应该是:
public $validate = array( 'email' => 'email' );
SQL表中的字段email设置为主键。从entities表中的cakephp 3.0开始,它应该如下所示
namespace App\Model\Table;
public function validationDefault($validator)
{
$validator
->email('email')
->add('email', 'email', [
'rule' => [$this, 'isUnique'],
'message' => __('Email already registered')
])
->requirePresence('email', 'create')
->notEmpty('email', 'Email is Required', function( $context ){
if(isset($context['data']['role_id']) && $context['data']['role_id'] != 4){
return true;
}
return false;
});
return $validator;
}
}
function isUnique($email){
$user = $this->find('all')
->where([
'Users.email' => $email,
])
->first();
if($user){
return false;
}
return true;
}
它的工作原理类似于“email”=>array('notempty'=>array('rule'=>'notempty','message'=>'Required Field'),'email'=>array('rule'=>'email','message'=>'entervalidemail'),'isUnique'=>数组('rule'=>'isUnique','message'=>'email已经存在'))