仅在选中复选框时才需要字段CakePHP 2验证

时间:2014-08-19 21:16:47

标签: validation cakephp cakephp-model

继承问题

我想要仅在选中另一个复选框的字段时才需要字段(litters_per_year)。当我这样做时,蛋糕正试图迫使我把一个价值投入到现场,我不知道为什么。我试过设置必要的& allowEmpty to false&分别为true,但我的自定义规则不会运行。

继承代码

注意:以下代码的详细信息并不重要 - 它们是为了提供一个场景。

我的 VIEW 中有以下代码可以正常工作:

echo $this->Form->input('litters_per_year', array(
    'label' => 'Litters per year (average)'
));

我在 MODEL 的public $ validate中有以下代码:

'litters_per_year' => array(
    'isNeeded' => array(
        'rule' => array('isNeeded', 'litters_per_year'),
        'message' => 'Please enter the litters per year average'
    )
)

调用自定义验证方法

public function isNeeded($field) {
    // Check if a checkbox is checked right here
    // Assume it is not... return false
    return false;
}

为简单起见,它返回false以解决此问题。

我们假设复选框字段名为'the_checkbox'。

1 个答案:

答案 0 :(得分:1)

目前,您的字段应始终无法通过验证,因为您从false返回isNeeded

为了使其按预期工作,请执行以下操作:
(注意:使用您的型号名称替换' ModelName')

public function isNeeded($field) {
    if ($this->data['ModelName']['the_checkbox']) {
        // Checkbox is checked, so we have to require litters per year
        if (empty($field)) {
            // They have checked the box but have NOT entered litters_per_year
            // so we have a problem. NOT VALID!
            return false;
        } else {
            // They have checked the box, and entered a litters_per_year
            // value, so all good! Everything is valid!
            return true;
        }
    } else {
        // Checkbox is not checked, so we don't care what 
        // the field contains - it is always valid.
        return true;
    }
}

或者,没有不必要的冗长,这应该有效:

public function isNeeded($field) {
    if ($this->data['ModelName']['the_checkbox']) {
        return $field;
    } else {
        return true;
    }
}

在此示例中,如果选中该复选框,则如果$ field为真,则验证将通过,如果为false则验证将失败。