Cakephp 自定义验证未采用AllowEmpty选项

Cakephp 自定义验证未采用AllowEmpty选项,cakephp,cakephp-2.1,Cakephp,Cakephp 2.1,我有上传图像的输入类型文件。这不是必填字段。因此我将allowEmpty选项设置为true。但我的模型没有选择这个选项。 验证代码: public $validate = array( 'image' => array( 'isImage' => array( 'rule' => 'isImage', 'message' => 'Please upload images only',

我有上传图像的输入类型文件。这不是必填字段。因此我将allowEmpty选项设置为true。但我的模型没有选择这个选项。 验证代码:

public $validate = array(
    'image' => array(
        'isImage' => array(
            'rule' => 'isImage',
            'message' => 'Please upload images only',
            'allowEmpty' => true,
            //'required' => true,
            //'last' => false, // Stop validation after this rule
            //'on' => 'create', // Limit validation to 'create' or 'update' operations
        ),
    ),
);

public function isImage($field = null) {
    $file_info = $field['image_path'];
    $image_types = array("image/jpeg", "image/gif", "image/jpg", "image/png");

    $result  = false;
    if (in_array($file_info['type'], $image_types)) {
        $result = true;
    }
    return $result;
}

或者任何其他用于验证图像类型的规则。

在您的示例中,
allowEmpty
甚至无关紧要-它使用自定义方法
isImage()
并返回false。结束验证/失败

如果要使用自定义验证规则,只需使用它即可。在函数中尝试以下操作:

if(empty($field)) return true;

你调试过($field)吗?我打赌这不是你期望的阵列。它更深一层(包含key=>value,key是字段名“image”)。对不起。我不明白你的意思。我试图说“allowEmpty”属性不起作用。因为
if(in_array))
在这里永远不会返回true,因此您的方法总是返回false。尝试使用isImage方法中上面提到的
debug()
。你会发现你犯了一个简单的错误。由于图像是一个数组,您也不能只使用
'allowEmpty'
,您需要在isImage验证方法中执行此操作。我认为在自定义验证中进行检查不是一个好方法。是否有其他方法可以在isImage函数中获取allowEmpty选项值?谢谢你的帮助。很好的建议,但是,我确实同意OP的说法,即“allowEmpty”选项是一个相当“奇怪”的选项,基本上它是一种“验证中的验证”,我认为它应该从CakePHP中删除:)@thaJeztah-我认为不值得删除,因为我只是想确保它不是空的
'allowEmpty'=>false
还有一个核心验证规则,这让CakePHP新手感到困惑:,
array('myfield'=>'notEmpty')
会达到同样的效果吗?这里不是讨论与问题/答案无关的问题的地方:)