我正在使用Laravel构建REST API,并想知道在验证时是否有自定义API响应的方法。
例如,我在Laravel请求中有一个验证规则,说明需要特定的字段。
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"
]
}
因此,错误更具体,更清晰。
那么,如何实现这个目标?
谢谢!
答案 0 :(得分:2)
为名为FormRequest
的{{1}}类提供自定义函数,并返回使用messages
映射的验证消息数组,以获取特定规则的特定消息:
dot notation
返回public function messages()
{
return [
'title.required' => 'Please enter an Ad title',
'title.min' => 'Your title must be at least 4 character'
]
}
消息是徒劳的,好像失败了,无论如何都会在执行success
请求时抛出422
错误代码。
对于ajax
属性,您将收到该属性作为有效负载的一部分,其中实际验证错误将包含在对象中。
答案 1 :(得分:1)
您可以自定义错误,请查看documentation。你也可以用这种方式验证
$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
]);
答案 2 :(得分:1)
我为您的REST-API验证提供了一个解决方案Laravel FormRequest验证响应只需编写几行代码即可更改。 在此处输入代码
请将这两行添加到您的 App \ Http \ Requests \ PostRequest.php
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
然后在您的文件中添加此功能。
您可以将$ response变量更改为您自己的特定方式。
protected function failedValidation(Validator $validator) {
$response = [
'status' => false,
'message' => $validator->errors()->first(),
'data' => $validator->errors()
];
throw new HttpResponseException(response()->json($response, 200));
}