继承问题
我想要仅在选中另一个复选框的字段时才需要字段(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'。
答案 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则验证将失败。