Validation 仅当选中复选框时才需要字段CakePHP 2验证
问题就在这里 仅当选中另一个复选框字段时,我才需要一个字段(每年垃圾量)。当我这样做的时候,cake试图强迫我在字段中输入一个值,我不知道为什么。我已经尝试将required和allowEmpty分别设置为false和true,但是我的自定义规则没有运行 这是代码 注意:下面代码的细节并不重要——它们在这里提供了一个场景 我认为以下代码可以正常工作:Validation 仅当选中复选框时才需要字段CakePHP 2验证,validation,cakephp,cakephp-model,Validation,Cakephp,Cakephp Model,问题就在这里 仅当选中另一个复选框字段时,我才需要一个字段(每年垃圾量)。当我这样做的时候,cake试图强迫我在字段中输入一个值,我不知道为什么。我已经尝试将required和allowEmpty分别设置为false和true,但是我的自定义规则没有运行 这是代码 注意:下面代码的细节并不重要——它们在这里提供了一个场景 我认为以下代码可以正常工作: echo $this->Form->input('litters_per_year', array( 'label' =>
echo $this->Form->input('litters_per_year', array(
'label' => 'Litters per year (average)'
));
我的模型的公共$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”。此时,您的字段应始终无法通过验证,因为您从
返回false
要使其按预期工作,请执行以下操作:
(注意:将“ModelName”替换为您的型号名称)
或者,在没有不必要的冗长的情况下,这应该是可行的:
public function isNeeded($field) {
if ($this->data['ModelName']['the_checkbox']) {
return $field;
} else {
return true;
}
}
在本例中,如果选中该复选框,则如果$field为truthy,验证将通过,如果为false,验证将失败。谢谢,但我能够做到这一点。问题是cakephp要求我输入每年的垃圾量,即使没有输入复选框。它使用html5就像我指定了'allowEmpty'=false一样,但我没有。您可以使用$this->alias,而不是硬编码模型名称,以便该函数可以跨模型使用
public function isNeeded($field) {
if ($this->data['ModelName']['the_checkbox']) {
return $field;
} else {
return true;
}
}