如果在 laravel 中验证失败则返回错误

Returning error if the validation fails in laravel

我正在使用 ajax 将数据填充到数据库中。我想要的是,如果输入的数据未通过验证,我想收到错误消息。我的控制器中有以下代码:

public function store(Request $request)
{
    $rules = $this->category->getRules();

    if ($request->validate($rules)->fails())
    {
        return Response::json(array(
            'success' => false,
            'errors' => $request->validate($rules)->getMessageBag()->toArray()

        ), 400);
    }

    $data = $request->all();
    $data['title'] = $request->title;
    $data['is_parent'] = $request->is_parent;
    $data['parent_id'] = $request->parent_id;
    $data['priority'] = $request->priority;
    $data['icon'] = $request->icon;
    $data['slug'] = $request->slug;
    $data['show_in_nav'] = $request->show_in_nav;
    $this->category->fill($data);
    $status = $this->category->save();
    if($status){
        return response()->json(['status'=>true,'data'=>'Category created successfully.']);
    } else {
        return response()->json(['status'=>false,'data'=>null]);
    }
}

它仍然在控制台中给出错误 422(无法处理的实体),但在 json 中没有。我怎样才能找到 json 中的错误,以便我可以将其显示给用户?

您可以发出表单请求 class 以添加验证逻辑并将验证错误响应为 json 数据。首先,使用 artisan 命令创建表单请求 class。

php artisan make:request CategoryRequest

这将在 App\Http\Requests 目录中创建 CategoryRequest.php,如下所示:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CategoryRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
             // add validation rules here
        ];
    }

    /**
     * Get the validation error messages that apply to the request.
     *
     * @return array
     */
    public function messages()
    {
        return [
            // add validation error messages associated with rules or you can leave this empty
        ];
    }
}

现在,在上述函数中添加您的验证规则和消息。为了 return 格式的 json 验证错误,只需在上面 class:

添加以下函数
/**
 * Return validation errors as json response
 *
 * @param Validator $validator
 */
protected function failedValidation(Validator $validator)
{
    $response = [
        'status' => 'failure',
        'status_code' => 400,
        'message' => 'Bad Request',
        'errors' => $validator->errors(),
    ];

    throw new HttpResponseException(response()->json($response, 400));
}

并且不要忘记在 CategoryRequest 的顶部添加以下内容 class:

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

现在,您可以得到 json 格式的错误。您可以访问响应中的错误,例如 response.errors

希望你明白。

感谢大家的努力,但我只是通过在 ajax:

中这样做得到了我想要的输出
error: function(response){   
    let data = response.responseJSON.errors;
    $.each( data, function( key, value ) {
    $( "<span class='text-danger'>"+value+"</span>" ).insertAfter( "#"+key );
});
}

此外,我不必在验证中编写条件,只需执行以下对我有用的操作即可。

public function store(Request $request)
{
    $rules = $this->category->getRules();
    $request->validate($rules);
    $data = $request->all();
    $data['name'] = $request->name;
    $data['is_parent'] = $request->is_parent;
    $data['parent_id'] = $request->parent_id;
    $data['priority'] = $request->priority;
    $data['icon'] = $request->icon;
    $data['slug'] = $request->slug;
    $data['show_in_nav'] = $request->show_in_nav;
    $this->category->fill($data);
    $status = $this->category->save();
    if($status){
        return response()->json(['status'=>true,'data'=>'Category created successfully.']);
    } else {
        return response()->json(['status'=>false,'data'=>null]);
    }
}