参考此stack question and answer我尝试将错误验证的响应格式化为更简化的格式...因此在自定义App \ Http \ Requests \ CustomRequest中我有
public function rules()
{
return [
'amt' => 'required|numeric|min:1000',
'year' => 'required|numeric|min:' . date_format(new \DateTime, 'Y'),
'user_id' => 'required',
'ratio' => 'required'
];
}
public function response(array $errors)
{
if ($this->expectsJson()) {
return response()->json(['messsage'=>'Cannot Validate','errors'=> $errors]);
}
return $this->redirector->to($this->getRedirectUrl())
->withInput($this->except($this->dontFlash))
->withErrors($errors, $this->errorBag);
}
/**
* Format the errors from the given Validator instance.
*
* @param \Illuminate\Contracts\Validation\Validator $validator
* @return array
*/
protected function formatErrors(Validator $validator)
{
return [];
}
在我的控制器中我有
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
*
* @return Response Header 201
*/
public function store(CustomFormRequest $request)
{
$requestData = $request->all();
Budget::create($requestData);
return response([], 201);
}
根据laravel文档,我只需要" typehint"请求。但是我的回答总是如此。
{" ID":" validation_failed""消息":"验证 失败""元":{"错误" {" AMT":[{"规则":&#34 ; min.numeric""消息":"该 amt必须至少为1000.","参数":[" 1000"]}]}}}
如果我改变响应格式,那是没有意义的。我需要的是
{" ID":" validation_failed""消息":"验证 失败""错误":[{" AMT" {"消息":"该 amt必须至少为1000."}}]}
我不确定此时应该做些什么。还有什么?
答案 0 :(得分:1)
旁道通信(IRC)显示肯德尔正在使用lanin/laravel-api-exceptions。这个包有一个自定义异常处理程序,它将Laravel的内置ValidationException更改为自定义异常类和自定义输出处理。提示输出不是由Laravel生成的,可以是json输出中的meta
键,Laravel不会生成它。
该问题提到了FormRequest的response(array $errors)
和formatErrors(Validator $validator)
方法,但这些方法不会使用这些方法。
可以通过覆盖自定义异常处理程序的renderForApi
方法来修改验证失败的json结果,检查ValidationFailedApiException
,并为这些返回自定义响应。
答案 1 :(得分:-1)
要发出自定义错误消息,我想您正在寻找messages
方法。在该方法上,只需返回一个数组。
示例:['fieldName.rule' => 'Custom message']
请参阅:https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_messages
奖励:如果您想为字段名称命名,也只需制作attributes
方法。
请参阅:https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_attributes