2013-10-27 51 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 
}