Laravel 如何用验证类验证 serializeArray () 后的数据呢

//比如前端是这样请求的
data = $("form").serializeArray();
            axios.put('{{route('users.update',[$user])}}', {data })
//后台接收的数据一般是这种格式的
data[
0:{name:name,value:xxx}
1:{name:email,value:xxx}
]

我在UserRequest验证类里面重写了validatinData方法

public function validationData()
    {
        $data = [];
        foreach($this->all() as $v){

            foreach($v as $v1){
                $data[$v1['name']]=$v1['value'];
            }
        }
        return $data;
    }

这样是可以正常验证数据了,但是还有个问题,在控制器中update的时候还需要重新走一遍validationData方法里面的循环来获取数据再更新,不然直接使用UserRequest $request的话数据格式还是原始接收的数据,求问各位大佬,除了在ajax中手动赋值参数外还有没有其他比较好的方法来处理这个问题

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4
早起的虫子

为什么我感觉你传递过来的是一个json格式的数据,我想能不能json_decode($request->all(),true),然后在进行验证呢。。。就不用重写这个方法了啊,用自带的验证规则就可以了

2个月前

validation 不应该直接修改原数据。个人认为这个设计是不合理的。

2个月前

@早起的虫子 请求进入控制器之前先走的FormRequest的吧,没地方转换的貌似,我改了下直接在ajax请求里赋值了,因为我这个验证类是根据不同场景验证不同字段的,所以我实在不想用make的方法手动验证,我在验证类里面添加了switch 根据不同路由返回不同的验证字段,这样控制器看着干净:joy:

public function rules(){
switch ($this->route()->getName()) {
            case 'users.editBasic':
                return [
                             'name'
                          ]
   }
}
2个月前

@Wi1dcard 所以我直接ajax赋值了,后端看着干净,前端不管了。。。

2个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!