0

我正在使用 CakePHP 2.3.8 并尝试使用 CakePHP 验证图像上传,但 Cake 在验证时给我带来了麻烦。我知道验证正在被触发,因为如果我从验证规则中删除特定扩展名,我会收到一条验证错误消息。(例如:从验证列表中删除“jpg”,然后上传一个 .jpg 文件,然后显示错误消息)。

'image' => array(
    'extension' => array(
        'rule' => array('extension', array('png','jpg','jpeg', 'gif')),
              'message' => 'Only jpeg, png and gif images are supported',
        )
),

这是我的控制器中的内容

if($this->request->is('post')){
    $this->Setting->set($this->request->data);
    if($this->Setting->validates() == true){
        $this->Session->setFlash('success');    
    }
    else{
        $this->Session->setFlash('fail');
    }
}

如果我上传,比如 image2.jpg,我会收到“失败”消息,但没有收到验证消息。如果我从扩展列表中删除“.jpg”并上传 jpg 文件,则会收到“失败”消息和验证错误消息。

当我调试 this->request->data 时,我得到以下响应

array(
'Setting' => array(
    'id' => '5', //hidden field
    'current_image' => '2_52547d56-1d80-410e-b739-09cecbdd56cb', //hidden field
    'image' => array(
        'name' => 'IMG_4385.JPG',
        'type' => 'image/jpeg',
        'tmp_name' => '/Applications/XAMPP/xamppfiles/temp/phpilL54j',
        'error' => (int) 0,
        'size' => (int) 1608456
    )
)
)

正如我所说,当我从验证规则中删除 jpg 扩展名时,会显示该消息。我知道它可能是在发布的数据中“找到”图像。

编辑 - 我发现了问题

我正在使用的视图有两种形式。一种用于提交图像,一种用于文本输入。在设置模型中,我对文本输入和图像进行了验证。尽管是完全独立的表单,但它似乎正在尝试验证这些文本输入,但在发送的数据中没有收到任何关于它们的信息。我将验证调用更改为仅验证图像并且它有效

if($this->Setting->validates(array('fieldList' => array('image'))) == true){...
4

1 回答 1

0

我想出了答案。无论如何,感谢您的提示。

我正在使用的视图有两种形式。一种用于提交图像,一种用于文本输入。在设置模型中,我对文本输入和图像进行了验证。尽管是完全独立的表单,但它似乎正在尝试验证这些文本输入,但在发送的数据中没有收到任何关于它们的信息。我将验证调用更改为仅验证图像并且它有效

if($this->Setting->validates(array('fieldList' => array('image'))) == true){
    //do stuff
}
于 2013-10-28T22:23:22.177 回答