return laravel 5.5 表单请求中自定义格式的第一个错误
return first error in customized formatted in laravel 5.5 form requests
在 laravel 5.5 之前,我使用了这样的自定义格式的表单请求:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
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;
}
}
表示发生错误时,只有第一个错误 return 编辑为 json 格式,如下所示:
{
"success" : "false",
"msg" : "title field is required "
}
但是在laravel 5.5中好像不能像这样格式化错误。
现在我想 return 错误完全相同的格式我上面提到的 json 格式但我不知道如何
此功能已在 Laravel 5.5 中更改。 From the upgrade guide "A Note On Form Requests":
If you were customizing the response format of an individual form request, you should now override the failedValidation
method of that form request, and throw an HttpResponseException instance containing your custom response
您更新的表单请求可能如下所示(pseudo-code,未测试):
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
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)
);
}
在 laravel 5.5 之前,我使用了这样的自定义格式的表单请求:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
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;
}
}
表示发生错误时,只有第一个错误 return 编辑为 json 格式,如下所示:
{
"success" : "false",
"msg" : "title field is required "
}
但是在laravel 5.5中好像不能像这样格式化错误。
现在我想 return 错误完全相同的格式我上面提到的 json 格式但我不知道如何
此功能已在 Laravel 5.5 中更改。 From the upgrade guide "A Note On Form Requests":
If you were customizing the response format of an individual form request, you should now override the
failedValidation
method of that form request, and throw an HttpResponseException instance containing your custom response
您更新的表单请求可能如下所示(pseudo-code,未测试):
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
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)
);
}