cakephp在现场的notempty和独特的验证

时间:2013-02-18 09:09:46

标签: validation cakephp

我正在使用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'
            ) 
);

3 个答案:

答案 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表中的字段电子邮件设置为主键。