2013-10-27 52 views
0

我正在使用CakePHP 2.3.8并尝试使用CakePHP验证图像上传,但Cake给我提供了验证问题。我知道正在触发验证,因为如果我从验证规则中删除特定的扩展名,我会收到验证错误消息。 (EX:从验证列表中删除'jpg',然后上传一个.jpg文件,然后显示错误消息)。CakePHP的表单验证问题

'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文件,那么我会收到'失败'消息和验证错误消息。

当调试这个 - >请求 - >数据,我得到以下响应

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的扩展,该消息显示。我知道这可能是“发现”发布数据中的图像。

编辑 - 我想通了这个问题

我的工作视图有2种形式。一个用于提交图像,另一个用于文本输入。在设置模型中,我对文本输入和图像进行了验证。尽管是完全独立的形式,但它似乎试图验证那些文本输入,但它没有在发送的数据中为它们接收任何信息。我改变验证电话只验证图像,它的工作

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

cakephp的版本是什么? –

+0

对不起,它是2.3.8。我会将其添加到我的帖子 – user1852176

+0

好的。我发布了一个awnser。如果它不起作用,请发布你的'debug($ this-> request-> data)' –

回答

0

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

我正在使用的视图有两种形式。一个用于提交图像,另一个用于文本输入。在设置模型中,我对文本输入和图像进行了验证。尽管是完全独立的形式,但它似乎试图验证那些文本输入,但它没有在发送的数据中为它们接收任何信息。我改变验证电话只验证图像,它的工作

if($this->Setting->validates(array('fieldList' => array('image'))) == true){ 
    //do stuff 
}