2

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;
            }
        }
 ...
4

1 に答える 1

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 の3155 行dispatchMethodで使用されています)

したがって、おそらくdatevalidationメソッドを書き直す必要があります。さらに、あなたのコード

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

$userExists0以上の数値を返すことができます。2以上を返す場合、ロジックは間違っています。Model::hasAny代わりに検討してください。falseそれが、あなたのケースのように常に検証される理由かもしれません。

于 2012-06-25T10:53:12.447 に答える