首页 > 解决方案 > 使用laravel表单请求验证失败时如何返回自定义响应

问题描述

当我们在控制器中使用Laravel 表单请求并且验证失败时,表单请求将使用errors变量重定向回来。

redirection当数据无效时,如何禁用并返回自定义错误响应?

我将使用表单请求来GET|POST|PUT请求类型。

我尝试Validator上课来解决我的问题,但我必须使用表单请求。

$validator = \Validator::make($request->all(), [
    'type' => "required|in:" . implode(',', $postTypes)
]);

if ($validator->fails()) {
    return response()->json(['errors' => $validator->errors()]);
}

标签: laravelvalidation

解决方案


创建自定义FormRequest类是要走的路。

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Validation\ValidationException;
use Illuminate\Http\Exceptions\HttpResponseException;

class FormRequest extends \Illuminate\Foundation\Http\FormRequest
{
    protected function failedValidation(Validator $validator)
    {
        if ($this->expectsJson()) {
            $errors = (new ValidationException($validator))->errors();
            throw new HttpResponseException(
                response()->json(['data' => $errors], 422)
            );
        }

        parent::failedValidation($validator);
    }
}

类位于app/Http/Requests目录中。在 Laravel 6.x 中测试和工作。


推荐阅读