2013-02-18 5 views
0

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' 
      ) 
); 

답변

14

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' 
     ) 
    ) 
); 

그렇지 않으면 규칙 중 하나만 사용됩니다.

+0

처럼 보일 것이다 – nbhatti2001

0

어떤 Cakephp 버전을 사용하십니까? 당신은 2.3을 사용하는 경우 내가 생각하기 때문에

, 그것은해야한다 : 기본 키로 설정하여 SQL 테이블의 필드 이메일로

public $validate = array('email' => 'email'); 

.

0

는 엔티티 테이블에 CakePHP는 3.0로 그것은이

 
'email'=>array(
      
        'notempty'=>array(
         'rule'=>'notempty', 
         'message'=>'Required Field' 
        ), 
      
        'email'=>array(
         'rule'=>'email', 
         'message'=>'Enter Valid Email' 
        ), 
        'isUnique'=>array(
         'rule'=>'isUnique', 
         'message'=>'Email Already Exists' 
        ) 
       ) 
같은 작품이

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; 
}