Laravel Request Validation: The given data was invalid
PostStoreRequest.php:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PostStoreRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'title' => 'required',
'content' => 'required',
];
}
public function messages()
{
return [
'title.required' => '文章标题不能为空',
'content.required' => '文章内容不能为空',
];
}
}
PostController.php:
use use App\Http\Requests\PostStoreRequest;
class PostController extends Controller
{
public function store(PostStoreRequest $request)
{
// ...
}
}
当我验证通过时,一切正常。
但是验证不通过时,返回的信息不是 PostStoreRequest.php 中 messages 函数中定义的错误提示信息,而是:
{
"message": "The given data was invalid.",
"status_code": 500,
"debug": {
"line": 117,
"file": "/var/www/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php",
"class": "Illuminate\\Validation\\ValidationException",
"trace": [
// ...
]
}
}
不知道哪里出错了。
关于 LearnKu
文件名
PostRequest.php与 类名class PostStoreRequest extends FormRequest不一致@青风百里 实际文件名是
PostStoreRequest.php没错,这里体温我写错了,应该也和文件名没有关系,命名空间和类名都没有问题。这个问题我也碰到了,很棘手啊,完全没思路,百度谷歌到的也没靠谱的方案。
getMessage 是拿不到的,这里捕获到错误后用 errors 方法获取自定义的错误信息
这个问题今天解决了,发生问题的场景是 在API的PUT接口中出现的, 浏览器和postman都不能直接发起PUT请求,必须要使用post方法,然后在请求体中额外自己添加一个_method:put的键值,否则服务器会识别不了数据。
跟踪了validation的代码,发现打印出来的data全是空,也就无法通过request验证了。
但是给出的结果:The given data was invalid实在是有点太坑了,一点都不精确,我的解决方案是,让自己创建的request 继承dingo/api的formrequest,而不是laravel自己的,这时候你会发现得到的错误提示更精确,直接告诉你上传的每个key对应的值都是空。
楼上说得对,可以解决这个问题,刚好自己今天也遇到了这个问题,多谢@jingzhognwa
@Hesunfly "The given data was invalid". 有办法将这个信息转化为中文吗?
你想要转化中文的话我还不是很清楚,不过我都是直接自己去定义错误消息的,比如说required直接报出不可为空。
你可以直接在request验证类中完成messages()方法就可以的,具体可以看文档的@Wen369367988
我是post请求也出现这个问题,怎么解决哎
@清歌 非常感谢, 特意注册账号来感谢你 :smile:
在 exception handler 里处理这个问题是正解,像是 Laravel 特意留给开发者的处理方式。