Php 自定义Laravel API验证响应
我正在用Laravel构建一个RESTAPI,并想知道是否有一种方法可以在验证时自定义API响应 例如,我在一个Laravel请求中有一个验证规则,表示需要一个特定字段Php 自定义Laravel API验证响应,php,laravel,validation,laravel-request,Php,Laravel,Validation,Laravel Request,我正在用Laravel构建一个RESTAPI,并想知道是否有一种方法可以在验证时自定义API响应 例如,我在一个Laravel请求中有一个验证规则,表示需要一个特定字段 public function rules() { return [ 'title'=>'required|min:4|max:100', ]; } 因此,对于这个验证,我在Postman中得到如下错误消息 { "title": [ "Please enter Ad Ti
public function rules() {
return [
'title'=>'required|min:4|max:100',
];
}
因此,对于这个验证,我在Postman中得到如下错误消息
{
"title": [
"Please enter Ad Title"
]
}
我想要的是像这样定制响应
{
"success": false,
"message": "Validation Error"
"title": [
"Please enter Ad Title"
]
}
因此,错误更加具体和明确
那么,如何做到这一点呢
谢谢 为名为
messages
的FormRequest
类提供一个自定义函数,并返回使用点表示法映射的验证消息数组,用于特定规则上的特定消息:
public function messages()
{
return [
'title.required' => 'Please enter an Ad title',
'title.min' => 'Your title must be at least 4 character'
]
}
返回success
消息是徒劳的,因为如果消息失败,那么执行ajax
请求时将抛出422
错误代码
对于消息
属性,您将收到该消息作为有效负载的一部分,其中实际验证错误将包含在对象中。您可以自定义错误,请检查。也可以通过这种方式进行验证
$validator = Validator::make($request->all(), [
'title'=>'required|min:4|max:100'
]);
if ($validator->fails()) {
// get first error message
$error = $validator->errors()->first();
// get all errors
$errors = $validator->errors()->all();
}
然后将它们添加到您的响应中,例如
return response()->json([
"success" => false,
"message" => "Validation Error"
"title" => $error // or $errors
]);
我为您的REST-API验证找到了一个解决方案,Laravel FormRequest验证响应只需编写几行代码即可更改。
在这里输入代码
请将这两行代码添加到您的应用程序\Http\Requests\PostRequest.php
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
然后将此函数添加到文件中
您可以将$response变量更改为您的特定方式
您不会显示正在验证的位置,但可以尝试在将验证响应发送回之前对其进行解析。谢谢!但是,我已经用自定义错误消息覆盖了messages方法。我感到困惑的是success
消息。我认为在API响应中必须这样才能识别状态。
protected function failedValidation(Validator $validator) {
$response = [
'status' => false,
'message' => $validator->errors()->first(),
'data' => $validator->errors()
];
throw new HttpResponseException(response()->json($response, 200));
}