2014-10-23 2 views
1

저는 CakePHP 2.3.8을 사용하고 있으며, 특정 유효성 검사 규칙을 필요에 따라 설정하는 방법이 있는지 알아 내려고하고 있습니다.CakePHP에서 즉석에서 유효성 검사 변경하기

예를 들어 내 사용자 모델에는 phone_number, username, email 및 password 유효성 검사가 있습니다. 사용자가 사용자 이름을 변경하려면 전화 번호가 필요하지 않습니다. 즉, 사용자 이름을 변경할 때 phone_number가 데이터에 존재할 것으로 예상되므로 필수로 설정할 수 없습니다.

public $validate = array(

    'username' => array(
     'minLength' => array(
      'rule' => array('minLength', '3'), 
      'message' => 'A username with a minimum length of 3 characters is required' 
     ), 
      'unique' => array(
       'rule' => 'isUnique', 
       'message' => 'This username has already been taken.' 
      ) 
    ), 
    'email' => array(
     'email' => array(
      'rule' => array('email'), 
      'message' => 'Please enter a valid email address.', 
     ), 
     'unique' => array(
      'rule' => 'isUnique', 
      'message' => 'This email address is already in use' 
     ) 
    ), 
    'password' => array(
     'rule' => array('minLength', '8'), 
     'message' => 'A password with a minimum length of 8 characters is required' 
    ), 
    'phone_number' => array(
     'rule' => array('valid_phone'), 
     'message' => 'Invalid phone number', 
    ) 
); 

내 컨트롤러에서 예상되는 입력이 게시되었는지 확인하는 작업입니다. 그렇지 않은 경우는 별도의 코딩을 많이있게처럼이 내가이있는 형태를 가지고 특히, 내가 느끼는, 작동하지만,이 검증되도록 null로 해당 인덱스 ... 같은

public function change_username(){ 

    if(!isset($this->request->data['username'])){ 
     $this->request->data['username'] = null; 
    } 

    $this->ExampleModel->set($this->request->data); 

    //if it wasn't posted, the username index will be created but set to null. This is my workaround for setting something to "required" 
    if($this->ExampleModel->validates() == true){ 
     //do something 
    } 
    else{ 
     //do something 
    } 
} 

설정 많은 입력.

필자는 필요한 입력 내용의 유효성을 검사하려고 시도했지만 데이터가 게시되지 않으면 무시됩니다. 예 :

if($this->ExampleModel->validates(array('fieldList' => array('phone')) == true){ 
    ..... 
} 

"전화"가 게시되지 않은 경우 유효성을 검사하지 않습니다.

해당 입력의 유효성 검사에 즉석에서 필요한 설정 방법이 있습니까? 여러 유효성 검사 룰 세트를 사용하여 this article을 찾았고 원하는대로 수행 할 수 있지만 많은 재 코딩이 필요했습니다.

유효성을 검사하기 전에 입력을 필수로 설정할 수 있습니까?

+0

만 양식 필드를 이메일, 우선은 모릅니다 만 이메일이 확인됩니다 usename에 대해 걱정할 필요가 보여 경우 비밀번호가 검증을 : 당신이 원하는대로 당신은 할 수 체인 여러만큼 규칙을 만들에 추가 호출 –

답변

1

첫째, 모델의 유효성 검사 규칙에 당신이 PHONE_NUMBER을 가지고 있지만 아직 전화을 확인하려고 전화에 대한 유효성 검사 규칙이 없습니다. 그것은 이상적인 요청 - 것> 데이터가 [] 모델 필드와 일치하는, 당신은 book.cakephp에서 배열 등

를 재 구축 할 수 있습니다

모델에서 암호 필드에 하나의 규칙을 추가합니다.

$this->validator() 
    ->add('password', 'required', array(
     'rule' => 'notEmpty', 
     'required' => 'create' 
    )) 
    ->add('password', 'size', array(
     'rule' => array('between', 8, 20), 
     'message' => 'Password should be at least 8 chars long' 
    )); 
관련 문제