laravel 5.5 我使用这样的表单请求与自定义格式:
:namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
use IlluminateContractsValidationValidator;
class StoreProductRequest extends FormRequest
{
public function authorize ()
{
return true;
}
public function rules ()
{
return [
'title' => 'required',
'desc' => 'required',
];
}
public function response (array $errors)
{
return response()->json($errors, 200);
}
protected function formatErrors (Validator $validator)
{
$result = ['success' => false, 'msg' => $validator->errors()->first()];
return $result;
}
}
是指何时发生错误,只有第一个错误作为JSON格式返回:
{
"success" : "false",
"msg" : "title field is required "
}
,但似乎在 Laravel 5.5 中,以这种方式无法格式化错误。
现在,我想以JSON格式提到上面提到的完全相同的错误,但我不知道
在Laravel 5.5中更改了此功能。从升级指南"表单请求上的注释":
如果您正在自定义单个表单请求的响应格式,则现在应该覆盖该表单请求的
failedValidation
方法,然后抛出包含您自定义响应的httpresponseexception实例
您更新的表单请求可能看起来像这样(伪代码,未测试(:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
use IlluminateContractsValidationValidator;
use IlluminateHttpExceptionsHttpResponseException;
class StoreProductRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'title' => 'required',
'desc' => 'required',
];
}
public function failedValidation(Validator $validator)
{
throw new HttpResponseException(
response()->json(['success' => false, 'msg' => $validator->errors()->first()], 400)
);
}
}
protected function formatErrors (Validator $validator)
{
$result = ['success' => false, 'msg' => $validator->errors()];
return $result;
}
扩展在@aken Roberts答案上。由于这是对表单的错误响应,因此我使用错误键(输入字段名称(在输入旁边显示错误。您可以从keys
方法获取第一个错误键。使用Laravel 5.7,这是预期的:
public function failedValidation(Validator $validator)
{
throw new HttpResponseException(
response()->json([
'success' => false,
'error' => (object) [
$validator->errors()->keys()[0] => $validator->errors()->first()
]
], 400)
);
}