Cakephp验证问题

时间:2012-05-28 11:09:54

标签: validation cakephp boolean

嘿伙计们在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;
            }
        }
 ...

1 个答案:

答案 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的原因。