2012-08-26 164 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; 
} 

我在自定义验证函数处理错误消息 - 不在验证数组中。让我知道如果这不起作用!