0

チェックボックスがオンになったときのカスタム検証ルールを作成しようとしています。次のページに進むには、入力フィールドに入力する必要があります。チェックを外すと、入力フィールドは不要になります。

ビューでの私のコードは次のとおりです。

echo $this->Form->inputs(array(
    'legend'=>'Certifications',
    'rn_box'=>array(
        'type'=>'checkbox',
        'label'=>'RN',
        'value' => $results['Education']['rn_box']
        ),
    'rn_number'=>array(
        'label'=>'RN Number:',
        'value' => $results['Education']['rn_number']
        ),

));

私のモデルでは、関数を作成しました:

public function rnCheck () {
if ($this->data['Education']['rn_box'] == '0') {
    return false;
}
    return true;

}

public $validate = array(
    'rn_number' => array(
        'rnCheck'=>array(
            'rule'=>'rnCheck',
            'message'=>'Please Provide a Number'
            ),
        ),

);

チェックボックスは、チェックされている場合は値 1 を返し、チェックされていない場合は値 0 を返します。rn_number フィールドは、検証しようとしている入力フィールドです。「required」、「allowEmpty」などで遊んでみましたが、うまくいきませんでした。誰かが私を正しい方向に向けることができれば、それは素晴らしいことです、ありがとう!

4

1 に答える 1

2

おそらく、rn_number の関数コールバックですべてを処理できます。また、混乱を避けるために、関数とルールの名前を rn_number と呼びます。

たとえば、検証配列を次のように変更します。

public $validate = array(
    'rn_number' => array(
        'rn_number'=>array(
            'rule'=>'rn_number'
        ),
    ),
);

カスタム検証関数は次のようになります。

public function rn_number () {
    if ($this->data['Education']['rn_box'] == 1) {
            if($this->data['Education']['rn_number'] == '')
                  $errors[] = "Please enter your RN Number.";
    }

    if (!empty($errors))
        return implode("\n", $errors);

    return true;
}

検証配列ではなく、カスタム検証関数でエラーメッセージを処理しています。これが機能しない場合はお知らせください。

于 2012-08-26T02:34:51.220 に答える