我使用Lumen开发了REST API。我认为在JSON对象中使用details
键很容易显示错误。查看响应:
{"detail": "Something bad happened."}
流明具有可以像$this->validate(["foo" => "required", "bar" => "required"})
一样在控制器内部调用的验证。如果我未在请求正文中设置foo
值,则服务器自然会响应:
{
"foo": [
"The foo field is required."
]
}
但是,我也希望它们位于details
键内,以便为消费者提供方便。查看所需的回复:
{
"details": {
"foo": [
"The foo field is required."
]
}
}
是否可以执行此操作?
如Validation section in Lumen documentation所述:
如果验证失败,则$ this-> validate帮助器<strong>将抛出带有包含所有相关错误消息的嵌入式JSON响应的Illuminate \ Validation \ ValidationException 。
这意味着我需要扩展ValidationException
,但我仍然不知道如何使用CustomValidationException
方法触发$this->validate
。
答案 0 :(得分:1)
您可以将$ this-> validate()的结果分配给一个变量,并根据您的选择在json响应中使用该变量。 如下所示:
$validator = Validator::make($request->all(), [
'foo' => 'required'
]);
if ($validator->fails()) {
return response()->json(['details'=> $validator->errors()->first() ], 400);
}
400这是json响应。您可以使用它
答案 1 :(得分:0)
在您的 App / Exception / Handler 类中,添加以下行:
use Illuminate\Validation\ValidationException;
...
public function render($request, Throwable $exception) {
...
if ($exception instanceof ValidationException) {
return response()->json([
'details' => $exception->errors(),
], 422);
}
return parent::render($request, $exception);
}
您仍然会收到翻译后的消息。在流明7.0中进行了测试。