我有一个表单请求文件,与我的控制器分开处理我的验证。在控制器内调用 api 后如何返回验证错误?
//我的控制器
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function orders(GetOrdersRequest $request, OrderRepository $orderRepository)
{
$order = $orderRepository->allOrders($request->paginate);
return $this->sendSuccess('Orders retrieved successfully', $order);
}
Run Code Online (Sandbox Code Playgroud)
Ada*_*dam 16
在 FormRequest 类中有一个函数称为failedValidation
:
protected function failedValidation(Validator $validator)
{
throw (new ValidationException($validator))
->errorBag($this->errorBag)
->redirectTo($this->getRedirectUrl());
}
Run Code Online (Sandbox Code Playgroud)
当您的验证失败时它会触发。对于 API 端点,此请求是一个错误的响应,因为它是重定向并且包含太多信息。要返回干净且轻量级的 json 响应,只需failedValidation
在 FormRequest 中编写该函数即可为您的 API 匹配响应。例如这样:
protected function failedValidation(Validator $validator)
{
$errors = $validator->errors();
$response = response()->json([
'message' => 'Invalid data send',
'details' => $errors->messages(),
], 422);
throw new HttpResponseException($response);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您将无法以这种方式获取错误,因为如果存在验证错误,FormRequest 将在请求到达控制器之前抛出异常。但是,您可以自行捕获表单请求中的错误,并使用以下failedValidation
方法修改响应
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
class OrderRequest extends FormRequest
{
public function authorize()
{
//
}
public function rules()
{
//
}
public function failedValidation(Validator $validator)
{
$errors = $validator->errors(); // Here is your array of errors
throw new HttpResponseException($errors);
}
}
Run Code Online (Sandbox Code Playgroud)
当验证失败时, Laravel 请求类会自动返回。您应该在视图(刀片)文件中显示错误消息。您可以按照官方文档进行操作。
对于 API,它会自动返回包含错误消息的 JSON 响应。
基本上你可以在blade文件中做到这一点:
@if($errors->has('email'))
<span class="error">{{ $errors->get('email') }}</span>
@endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15093 次 |
最近记录: |