图像验证不起作用如果使用 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'
我尝试使用谷歌搜索并看到此论坛上发布的其他问题,但找不到解决我的问题的方法。我正在使用 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'