Laravel 使用请求验证传入的 ajax

Posted

技术标签:

【中文标题】Laravel 使用请求验证传入的 ajax【英文标题】:Laravel validate incoming ajax using request 【发布时间】:2018-01-17 00:31:16 【问题描述】:

我有这样的看法:

//视图的sn-p

<td><input class="form-field" type="text" id="entity" name="name" data="$entity->id" value="$entity->name" onkeyup="validation(this.value);" onblur="updateEntity(this.value,this.name,this.id,$entity->id)"></td>

<td><input class="form-field" type="text" id="entity" name="type" value="$entity->type" onkeyup="validation(this.value);" onblur="updateEntity(this.value,this.name,this.id,$entity->id)"></td>

其中有一个ajax:

function updateEntity(value, name, data, id) 
  $.ajax(
        url: '/entityadmin/' + value + '/' + name + '/' + data + '/' + id,
        method: 'POST',
        dataType: 'json',
        success: function(save) 
          $('.messages').append('<div class="alert alert-success">Type Updated!<div>');
            setTimeout(function() 
              $(".alert").fadeTo(2000, 500).slideUp(500, function()
                $(".alert").slideUp(500);
              );  
            , 4000); 
        ,
        error: function(data) 
          console.log(data);
          $('.messages').append('<div class="alert alert-danger">Error, please try again!<div>');
            setTimeout(function() 
              $(".alert").fadeTo(2000, 500).slideUp(500, function()
                $(".alert").slideUp(500);
              );  
            , 4000); 
        ,
        headers: 
        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
        
    );

控制器:

public function entityUpdate($value, $name, $data, $id, EntityRequestUpdate $request) 

        $request->$name = $value; //like this?
        if($data == "entity") 
            $save = Entity::find($id);
        else
            $save = User::find($id);
        
        $save->$name = $value;
        $save->save();
        return response()->json(['results' => $save]);       
    

和请求:

public function rules()
    
        return [
            'startdate' => 'required|date',
            'endate' => 'nullable|date',
            'startime' => 'required|time',
            'endtime' => 'required|time',
            'title' => 'required',
            'type' => 'required',
            'description' => 'required',
            'frequency' => 'required',
            'interval' => 'nullable|numeric',
            'monthday' => 'nullable|numeric|min:1|max:3',
            'weekday' => 'nullable|alpha|max:3',
            'month' => 'nullable|numeric',
            'until' => 'nullable|date',
            'tags' => 'nullable',
            'img' => 'nullable|file|image',
        ];
    

问题是它只需要验证一个字段,因为每次都会更改一个字段,我如何使用此验证来验证传入变量并将错误返回给 ajax,如果有任何错误消息?

【问题讨论】:

【参考方案1】:

您可以manually create a validator 来验证这一字段,如下所示:

$validator = Validator::make(
    [ 'name' => $value ], 
    collect($this->rules())->only([$name])->all()
);

此验证器将从定义的规则中获取 name 验证器,并根据第一个值数组进行检查。

【讨论】:

它如何知道该特定字段的验证规则?因为可能需要对姓名或电子邮件或其他任何内容进行验证,具体取决于实际正在编辑的内容 我更新了问题,因此验证器使用动态$name

以上是关于Laravel 使用请求验证传入的 ajax的主要内容,如果未能解决你的问题,请参考以下文章

使用接口传入请求的 NestJS 类验证器

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

Laravel 在商店和更新上的表单请求验证使用相同的验证

如何使用请求验证 Laravel 中的数组?

Laravel 5表单请求验证返回禁止错误

Laravel 中的闭包参数是如何传入的