首页 > 解决方案 > 如何将 Laravel 自定义请求中的错误返回给 Ajax

问题描述

我提出了如下的定制要求。

class CustomRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }
    public function rules()
    {
      $rule['name']='required';
      $rule['email'] = 'required|email';
      return $rule;
    }
}

如何在 ajax 中返回验证错误?当我不使用自定义请求时,我返回了这样的错误。

public function store(Request $request)
{
   $validation = Validator::make($request->all(), [
      'name'=>'required',
      'email'=>'required|email'
   ]
   if($validation->fails())
   {
      return response()->json([$errors=>$validation->errors()]);
   }
   return response()->json(['status'=>'success']);
}

所以在这里而不是Request,如果我使用CustomRequestthen 我们如何捕获错误?


另一件事。在自定义请求规则中,我们如何获取请求输入值?

   public function rules()
    {
      $rule['name']='required';
      if($this->input('phone')) {
        $rule['phone'] = 'integer';
      }
      $rule['email'] = 'required|email';
      return $rule;
    }

$this->input('phone') 对吗?希望能回答我的2个问题。

标签: laravellaravel-5laravel-validationlaravel-requestlaravel-response

解决方案


错误将在您的回调error函数或catch回调中取决于您如何ajax拨打电话。

例如。

$.ajax({
        url: "/test",
        type: "post",
        data: {foo:'test'} ,
        success: function (response) {
            console.log(response);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            var data = jqXHR.responseJSON;
            console.log(data.errors);// this will be the error bag.
        }

因为FormRequest我认为您的代码不正确

public function rules()
{
    return [
        'title' => 'required',
        'body' => 'required',
    ];
}

这将进行验证。你不需要像 Laravel 那样访问输入值。但出于某种原因,如果你真的想要它,你总是可以使用全局辅助函数request()->input('title');


推荐阅读