图像验证不起作用如果使用 ajaxForm

Image validation not working If using ajaxForm

我尝试使用谷歌搜索并看到此论坛上发布的其他问题,但找不到解决我的问题的方法。我正在使用 Jquery ajaxForm 方法提交表单。我的表单在可用于上传图片的表单中也包含一个 file 字段。我已经在我的模型中定义了验证。但问题是即使我正在上传正确的 jpg 文件,我仍然收到

的错误消息
Argument 1 passed to Illuminate\Validation\Factory::make() must be of the type array, object given.

Javascript代码

$('#create_form').ajaxForm({
    dataType:'JSON',
    success: function(response){
        alert(response);    
    } 
}).submit();

控制器代码

if ($file = Input::file('picture')) {
    $validator = Validator::make($file, User::$file_rules);

    if ($validator->fails()) {
        $messages = $validator->messages();
        foreach ($messages->all(':message') as $message) {
            echo $message; exit;
        }
        return Response::json(array('message'=>$response, 'status'=>'failure'));
    } else {
        // do rest 
    }
}

模型代码

public static $file_rules = array(
    'picture' => 'required|max:2048|mimes:jpeg,jpg,bmp,png,gif'
);

POST请求

我知道我在模型中定义的验证需要一个数组。但是通过在验证器中传递 $file ,传递了一个对象。然后我将代码更改为:

$validator = Validator::make(array('picture' => $file->getClientOriginalName()), User::$file_rules);

现在出现错误:

The picture must be a file of type: jpg, JPEG, png,gif.

问题是您直接传递文件对象进行验证。 Validator::make() 方法将所有四个参数作为数组。此外,您需要将整个文件对象作为值传递,以便 Validator 可以验证 mime 类型、大小等。这就是为什么您的代码应该是这样的。

$input = array('picture' => Input::file('picture'));
$validator = Validator::make($input, User::$file_rules);

if ($validator->fails()) {
    $messages = $validator->messages();
    foreach ($messages->all(':message') as $message) {
        echo $message; exit;
    }
    return Response::json(array('message'=>$response, 'status'=>'failure'));
} else {
    // do rest 
}

希望对你有用。

试试这样的规则。

$rules = array(
 'picture' => 'image|mimes:jpeg,jpg,bmp,png,gif'
);

或尝试删除 'mimes'