2012-08-22 40 views
2

我正在使用cakephp,我得到一個奇怪的行爲。Cakephp數據驗證 - 該字段不能留爲空白

這是在我的模型驗證規則:

public $validate = array(
    'flyer' => array(
     'rule' => array('fileValidation', 'flyer', array('image/jpeg', 'image/pjpeg'), NULL, TRUE) 
    ) 
    // Other rules... 
); 

這裏是fileValidation方法(是的,我是法國人=))

public function fileValidation(array $check, $field, array $allowedMimeTypes = NULL, $maxFileSize = NULL, $allowEmpty = FALSE) 
{ 
    $file = array_shift($check); 
    $message = NULL; 

    if($file['error'] === UPLOAD_ERR_OK){ 
     // checking uploaded file 
     if(empty($file['tmp_name']) || empty($file['tmp_name']) || $file['tmp_name'] === 'none' || !is_uploaded_file($file['tmp_name'])){ 
      $message = "Une erreur est survenue lors de l'envoi du fichier, veuillez réessayer à nouveau. Si le problème persiste, merci de contacter le support technique."; 
     } 

     // checking mimeTypes if required 
     elseif(!empty($allowedMimeTypes) && !in_array($file['type'], $allowedMimeTypes)){ 
      $message = "Le type de fichier envoyé n'est pas celui attendu."; 
     } 

     // checking file size if required 
     elseif(!empty($maxFileSize) && $file['size'] > $maxFileSize){ 
      $message = "Le fichier envoyé est trop volumineux, réduisez sa taille et réessayez."; 
     } 

     else{ 
      return TRUE; 
     } 
    } 
    elseif($file['error'] === UPLOAD_ERR_NO_FILE){ 
     // validates if no upload is allowed 
     if(!$allowEmpty){ 
      $message = "Une erreur est survenue lors de l'envoi du fichier, veuillez réessayer à nouveau. Si le problème persiste, merci de contacter le support technique."; 
     } 
     else{ 
      return TRUE; 
     } 
    } 
    elseif($file['error'] === UPLOAD_ERR_INI_SIZE){ 
     $message = "Le fichier envoyé est trop volumineux, réduisez sa taille et réessayez."; 
    } 
    elseif($file['error'] === UPLOAD_ERR_FORM_SIZE){ 
     $message = "Le fichier envoyé est trop volumineux, réduisez sa taille et réessayez."; 
    } 
    elseif($file['error'] === UPLOAD_ERR_PARTIAL){ 
     $message = "Une erreur est survenue lors de l'envoi du fichier, le serveur n'a reçu qu'une partie du fichier, veuillez réessayer à nouveau."; 
    } 
    elseif($file['error'] >= UPLOAD_ERR_NO_TMP_DIR){ 
     $message = "Une erreur interne est survenue, veuillez réessayer à nouveau. Si le problème persiste, merci de contacter le support technique."; 
    } 

    // Here is the problem 
    $this->validationErrors[$field][] = $message; 

    return FALSE; 
} 

到目前爲止好,我的驗證規則似乎正常工作,但當出現錯誤時,我有兩條消息:「我的自定義消息」和「此文件不能留空」。

如何刪除此消息,我錯在哪裏?

在此先感謝。

+0

,如果你設置你的規則到'allowEmpty'參數會發生什麼真正? –

+0

如果沒有文件上傳,則驗證規則返回TRUE,這相當於cakeE中的'allowEmpty',因爲有一個數組,所以在文件輸入中不起作用。有一個錯誤,我要解決它(無論發生什麼,它實際上返回TRUE)。 我希望清楚,對不起我的英語不好。 – bgondy

回答

0

Cakephp.Saint的解決方案不起作用,因爲$消息是一個字符串,而不是一個數組,但能正常工作:

return $message; 
2

可能它會爲你的作品

$this->validationErrors[$field][] = $message; // comment this Line 
return FALSE // comment this Line 

,並添加以下行最後你fileValidation功能

回報破滅( 「\ n」,$消息);