我正在使用cakephp。我需要在电子邮件字段中添加三个验证。如果没有给出电子邮件,则首先验证,对于有效的电子邮件地址,第二次验证,如果给出电子邮件地址则为第三验因为它是一个注册表格。
我如何在一个字段上添加三个验证,我尝试使用以下代码,但它对我不起作用。
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'
)
);
答案 0 :(得分:14)
你有两个相同的索引'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'
)
)
);
否则只会使用您的一条规则。
答案 1 :(得分:1)
从实体表中的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;
}
答案 2 :(得分:0)
你使用什么版本的Cakephp?
因为我认为如果你使用2.3,它应该是:
public $validate = array( 'email' => 'email' );
将SQL表中的字段电子邮件设置为主键。