2012-05-28 85 views
2

嘿家伙有一个Cakephp验证的问题..Cakephp验证问题

我想知道为什么partytwo验证会直接到false?

这里是我的关系模型:

<?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'包含您要验证/保存的当前数据。考虑到这一点,更新您的代码。您在userExists方法中的目标是检查您的数据中是否存在用户标识。 – tigrang

回答

1

根据CakePHP的书Adding Your Own Validation Methods部分,是写了这样

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

自定义规则意味着蛋糕将运行在您的datevalidation方法是这样的:

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

用同样的方式,

'rule' => array('userExists') 

导致蛋糕运行

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

(模拟电话。实际调用是使用dispatchMethod在Model.php的line 3155

那么,你是最有可能需要重写你的datevalidation方法。此外,你的代码

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

$userExists可以返回你一个数大于或等于0。您的逻辑是错误的,如果返回2以上。改为考虑Model::hasAny。这可能是它为什么总是被验证为false您的情况。