2012-08-26 209 views
0

我試圖創建一個自定義驗證規則,當選中複選框時,需要填寫輸入字段才能進入下一頁。如果未選中,則不需要輸入字段。CakePHP中的自定義驗證規則

這是我在查看代碼:

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字段是我試圖驗證的輸入字段。我嘗試玩'必需的','allowEmpty'等,但沒有運氣。如果任何人都可以直接指出我的意思,那很好,謝謝!

回答

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

我在自定義驗證函數處理錯誤消息 - 不在驗證數組中。讓我知道如果這不起作用!