CakePHP中的自定义验证规则

时间:2012-08-26 01:47:33

标签: php mysql cakephp

我正在尝试创建自定义验证规则,以便在选中复选框时,需要填写输入字段才能继续下一页。如果未选中,则不需要输入字段。

这是我在View中的代码:

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'等没有运气。如果有人能直接指出我,那就太好了,谢谢!

1 个答案:

答案 0 :(得分: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;
}

我正在处理自定义验证函数中的错误消息 - 而不是在验证数组中。如果这不起作用,请告诉我!