0

Cakephp 2.3 で非データベース フィールドのカスタム検証メソッドを呼び出そうとしましたが、うまくいきませんでした。検証メソッドは単に呼び出されません。誰かが修正を提案し、これがケーキの問題であるかどうかを説明できますか?

私のコード

public $validate = array(
        'name' => array
            (
            'rule' => 'notEmpty',
            'message' => 'This field cannot be left blank'
            ),
        'password' => array
            (
            'rule' => 'notEmpty',
            'message' => 'This field cannot be left blank',
            'allowEmpty' => false
            ),
        'verify_password' => array
            (
            'rule' => 'notEmpty',
            'message' => 'This field cannot be left blank',
            'allowEmpty' => false
            ),
        'rule2' => array
            (
            'rule' => array('check_password'),
            'message' => 'passwords must match each other',
            'allowEmpty' => false
            )
        ),
       'email' => 'email',
    );

ここで、「password」と「verify_passowrd」はデータベース以外のフィールドです。カスタム検証方法は

function check_password($check) {

        $value = array_values($check);
        $value = $value[0];


         if($value == $this->data['User']['verify_password'])
             return true;
         else 
             return false;

    }

カスタム メソッドが呼び出されることはありません。

4

2 に答える 2

0

rule2 はフォームのフィールドではありませんが、検証ルールを割り当てます

コードを適切に識別すると、エラーがよりよく表示されます

public $validate = array(
    'name' => array(
        'rule' => 'notEmpty',
        'message' => 'This field cannot be left blank'
    ),
    'password' => array(
        'rule' => 'notEmpty',
        'message' => 'This field cannot be left blank'  
    ),
    'verify_password' => array(
        'notEmpty' => array(
                    'rule' => array('notEmpty'),
                    'message' => 'This field cannot be left blank'
        ),
        'verify' => array(
                    'rule' => array('check_password'),
                    'message' => 'passwords must match each other'
        )
    ),
   'email' => 'email'
);

allowEmpty はデフォルトで false であり、notEmpty ルールでは必要ありません

于 2013-07-09T12:24:53.987 に答える
0

最初に 1 つのルールを追加してから、最後に動作するかどうかをテストする場合は 2 つ目のルールを追加してみてください

ここで、カスタム関数を呼び出すことを確認できます。

public $validate = array(
        'password' => array(
            'rule'    => 'check_password',
            'message' => 'Slug can only be letters, numbers, dash and underscore'
        )
    );

モデル カスタム関数

function check_password($check) {

    $value = array_values($check);
    $value = $value[0];


     if($value == $this->data['User']['verify_password'])
         return true;
     else 
         return false;
}

さらにお手伝いできることがあればお知らせください。

于 2013-06-01T04:19:52.840 に答える