2

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;
}

これまでのところ、検証ルールは正しく機能しているようですが、エラーが発生すると、「カスタム メッセージ」と「このファイルを空白のままにすることはできません」という 2 つのメッセージが表示されます。

このメッセージを削除する方法、どこが間違っていますか?

前もって感謝します。

4

2 に答える 2

2

それはあなたのために働くかもしれません

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

そして、fileValidation 関数の最後に次の行を追加します

return implode("\n", $message);

于 2012-08-22T10:53:35.670 に答える
0

$message は配列ではなく文字列であるため、Cakephp.Saint のソリューションは機能しませんが、これは正常に機能します。

return $message;
于 2012-09-05T08:37:18.080 に答える