2

大家好,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;
            }
        }
 ...
4

1 回答 1

1

根据 CakePHP book添加你自己的验证方法部分,一个自定义规则是这样写的

'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'
));

(模拟调用。实际调用dispatchMethod在Model.php的第 3155 行使用)

所以你很可能需要重写你的datevalidation方法。此外,您的代码

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

$userExists可以返回一个大于或等于 0 的数字。如果返回 2 或更多,则您的逻辑是错误的。Model::hasAny改为考虑。这可能是为什么它总是false针对您的情况进行验证的原因。

于 2012-06-25T10:53:12.447 回答