我正在使用 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){...