如何使用 Laravel 表单请求在验证失败时返回自定义响应

And*_*ter 7 validation 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()]);
}
Run Code Online (Sandbox Code Playgroud)

N'B*_*yev 15

创建自定义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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我终于找到了你的答案,正是我所需要的。 (2认同)

Rom*_*rik 0

基类FormRequest有方法failedValidationFormRequest尝试在你的后代中覆盖它

use Illuminate\Contracts\Validation\Validator;

class SomeRequest extends FormRequest
{
    ...

    public function failedValidation(Validator $validator)
    {
        // do your stuff
    }
}
Run Code Online (Sandbox Code Playgroud)