嘿伙计们在Cakephp验证方面遇到了问题..
我想知道为什么partytwo验证会直接变为假?
这是我的关系模型:
<?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;
}
}
...
答案 0 :(得分:1)
根据CakePHP书籍Adding Your Own Validation Methods部分,一个像这样写的自定义规则
'rule' => array('datevalidation', 'systemDate')
表示Cake将运行您的datevalidation
方法,如下所示:
$valid = $Relationships->datevalidation(array(
'date' => 'some user input value'
), 'systemDate');
以同样的方式,
'rule' => array('userExists')
导致Cake运行
$valid = $Relationships->userExists(array(
'partytwo' => 'some user input value'
));
(模拟通话。实际通话在Model.php的line 3155使用dispatchMethod
)
所以你很可能需要重写你的datevalidation
方法。此外,您的代码
$userExists= $this->find('count', array('conditions'=>$check));
$userExists
可以返回一个大于或等于0的数字。如果返回2或更多,则逻辑错误。请考虑使用Model::hasAny
。这可能是为什么它始终被验证为false
的原因。