2012-05-28 2 views
2

얘들 아 CakePHP의 검증에 문제가 .. 내가 왜 partytwo 유효성 검사가 거짓으로 직진 알고 싶어CakePHP의 검증 문제

있어? 여기

내 관계 모델 : CakePHP의 책 Adding Your Own Validation Methods 섹션이

'rule' => array('datevalidation', 'systemDate') 

처럼 쓴 사용자 정의 규칙에 따르면

<?php 
    class Relationship extends AppModel{ 
     var $name='Relationship'; 
     public $useTable = 'relationships_users'; 
     public $primaryKey = 'id'; 

     var $validate = array(
      'date' => array(
       'rule' => array('datevalidation', 'systemDate'), 
       'message' => 'Current Date and System Date is mismatched' 
      ), 
      'partytwo'=>array(
       'partytwoExists'=>array(
        'rule'=> 'userExists', 
        'message'=>'That username doesnt exist.' 
       ) 
      ) 
     ); 

     function datevalidation($field=array(), $compare_field=null) { 
      if ($field['date'] > $compare_field) 
       return TRUE; 
      else 
       return FALSE; 
     } 

     function userExists($check) { 
      $userExists= $this->find('count', array('conditions'=>$check)); 
      if($userExists == 1) { 
       return TRUE; 
      }else{ 
       return FALSE; 
      } 
     } 
... 
+1

어쨌든'$ check' 매개 변수는 무엇입니까? –

+0

'$ check'는 유효성을 검사하려는 필드를 가지고 있습니다. '$ this-> data'는 현재 유효성 검사/저장하려는 데이터를 가지고 있습니다. 이를 염두에두고 코드를 업데이트하십시오. 데이터의 사용자 ID가 데이터베이스에 존재하는지 확인하는 userExists 메소드의 목표. – tigrang

답변

1

것은 케이크 것 같이 당신의 datevalidation 메소드를 실행 의미

$valid = $Relationships->datevalidation(array(
    'date' => 'some user input value' 
), 'systemDate'); 

같은 방식으로

'rule' => array('userExists') 

는 케이크가

$valid = $Relationships->userExists(array(
    'partytwo' => 'some user input value' 
)); 

(시뮬레이션 호출을 실행됩니다. 실제 호출은

그래서 당신은 대부분의 아마 당신의 datevalidation 방법을 다시 작성할 필요) Model.php의 line 3155에서 dispatchMethod을 사용하고 있습니다. 또한, 코드

$userExists= $this->find('count', array('conditions'=>$check)); 

$userExists는 2 개 이상을 반환하는 경우 귀하의 논리가 잘못 0으로 당신이 번호를 크거나 같은 반환 할 수 있습니다. 대신 Model::hasAny을 고려하십시오. 그것은 항상 귀하의 경우에 false으로 확인되는 이유가 될 수 있습니다.