【问题标题】:How to return errors in Laravel Custom Request to Ajax如何将 Laravel 自定义请求中的错误返回给 Ajax
【发布时间】:2020-07-21 19:19:09
【问题描述】:

我提出了如下的自定义请求。

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,如果我使用CustomRequest,那么我们如何捕获错误?


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

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

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

【问题讨论】:

    标签: laravel laravel-5 laravel-validation laravel-request laravel-response


    【解决方案1】:

    错误将出现在您的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');

    【讨论】:

    • 嗯,它返回 422 错误(无法处理的实体)而且我认为表单验证规则是正确的。因为是相同的返回值。($rule是数组),用你简单的返回数组,我们无法根据输入值进行验证。
    • 是422,因为有问题,没有问题。您仍然可以从中访问错误消息。 @lovecoding
    • @lovecoding 我们可以验证输入,只需$validated = $request->validated(); 这将给出验证的输入数据。
    • @lovecoding 之前是store(Request $request) 现在应该是store(CustomRequest $request)
    • status 422 来自 rfc4918
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多