Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/cakephp/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 仅当选中复选框时才需要字段CakePHP 2验证_Validation_Cakephp_Cakephp Model - Fatal编程技术网

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

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' =>

问题就在这里

仅当选中另一个复选框字段时,我才需要一个字段(每年垃圾量)。当我这样做的时候,cake试图强迫我在字段中输入一个值,我不知道为什么。我已经尝试将required和allowEmpty分别设置为false和true,但是我的自定义规则没有运行

这是代码

注意:下面代码的细节并不重要——它们在这里提供了一个场景

我认为以下代码可以正常工作:

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;
    }
}