序列化表单验证 Laravel 8

Posted

技术标签:

【中文标题】序列化表单验证 Laravel 8【英文标题】:Serialize form validation Laravel 8 【发布时间】:2021-12-13 01:32:04 【问题描述】:

无法验证 laravel 8 中的输入数组。我从前端获得了可从后端成功访问的序列化表单数据。

public function GetForm(Request $request)

        $request = $request->all();
        $input =  array();
        parse_str($request['data'], $input);

        return $input;


output:
  
    "inputID":"26",
    "inputName":"Julie Hughes est",
    "inputPhone":"+94111222333",
    "inputEmail":"testmail@gmail.com"
  

我想要的是在用户更改时更新数据之前验证更新函数中的表单。


    public function update(Request $request)
    
        if (request()->ajax()) 
           $request = $this->GetForm($request);
            $object = User::find($request['inputID']);
            $object->name = $request['inputName'];
            $object->phone = $request['inputPhone'];
            $object->email = $request['inputEmail'];
            $object->save();

            return response()->json([ 
                "message" => "User Information has been updated"
            ], 200);
        
    

我对验证功能的尝试如下

public function GetForm(Request $request)
    
        $request = $request->all();
        $input =  array();
        parse_str($request['data'], $input);

        return $this->validate(
            $input, // Expected type 'Illuminate\Http\Request'. Found'array'.intelephense(1006)
            [
                'inputID' => ['required'],
                'inputName' => ['required', 'string', 'max:255'],
                'inputPhone' => ['required', 'string', 'email'],
                'inputEmail' => ['required', 'min:9', 'number'],
            ],
        );
    

寻找解决此问题的建议。


      $('#updateBtn').click(function() 
            console.log('update triggered')
            axios.get('/users/update/', 
                    params: 
                        data: $("#updateForm").serialize()
                    
                )
                .then(function(response) 
                    let i = response.data
                    console.log(i);
                    userTable.ajax.reload();
                    $('#editModel').modal('hide')
                    window.toastr.success(i.message);

                ).catch(function(error) 
                    console.log(error)
                )
        )

【问题讨论】:

inputId,inputName,这些都是数组吗?还是只是一个普通的形式? 您是否尝试使用 ajax 验证? @AsfandyarKhan 是的,尝试使用 ajax 你也可以分享你的ajax代码吗? @AsfandyarKhan [ 'inputID' , 'inputName' , 'inputPhone' , 'inputEmail' ] 这是一个数组 【参考方案1】:

尝试这样的验证。

public function getForm(Request $request)

    $inputs = $request->all();
    $validator = Validator::make($inputs, [
        'inputID' => 'required',
        // other validations
    ]);

    if ($validator->passes()) 

        return response()->json(['message'=>'User Information has been updated.']);
        
    

    return response()->json(['error'=>$validator->errors()]);

Validator::make 使用 Validator 外观为您创建一个验证器实例。而已。您必须自己执行验证并实现错误处理。

【讨论】:

以上是关于序列化表单验证 Laravel 8的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 和 Vue 身份验证表单在登录失败时重新加载

怎么把laravel的表单验证信息改成中文

Laravel 表单请求的封装

Laravel教程 七:表单验证 Validation

Laravel 5.5 - 同时验证多个表单请求

在 laravel 表单请求验证中验证数组对象?