繁体   English   中英

Laravel对象验证数组

[英]Laravel array of objects validation

我正在尝试在Laravel中对对象的关联数组进行验证。

我传递给控制器​​的有效JSON字符串如下所示:

{
    'create': [
        {
            'artnr': '123456',
            'unit':  'Stk.'
        },
        {
            'artnr': '23456',
            'unit':  'Kg.'
        }
    ],
    'update': [
        {
            'id': 1
            'artnr': '567890',
            'unit':  'Stk.'
        },
        {
            'id': 2
            'artnr': '67836',
            'unit':  'Kg.'
        }
    ]
}

验证数据的控制器功能如下所示:

public function store(Request $request)
{
    $request->replace(array(
        'create' => json_decode($request->create),
        'update' => json_decode($request->update)
    ));

    $validator = Validator::make($request->all(), [
        'create' => 'required|array',
        'create.*.artnr' => 'required|max:20',
        'create.*.unit' => 'max:20',
        'update' => 'required|array',
        'update.*.id' => 'required|exists:products,id',
        'update.*.artnr' => 'required|max:20',
        'update.*.unit' => 'max:20'
    ])->validate();
}

尽管我在store函数中指定每个对象artnr必须存在artnr ,但是当我传递没有artnr的对象时,控制器不会引发错误。

有什么想法我做错了吗?


编辑

好的,所以在遵循user2486的建议并使用了不同的示例数据之后,我现在发现,当我将idartnrunit等属性作为关联数组传递时,验证器就可以工作了。 像这样:

$arr = array(
    'create' => array(
        array(
            'artnr' => '123456',
            'unit' => 'Kg'
        ), array(
            'unit' => 'Stk.'
        )
    ), 'update' => array(
        array(
            'id' => 1,
            'unit' => 'Stk.'
        ), array(
            'id' => 2,
            'artnr' => '123456',
            'unit' => 'Kg'
        )
    )
);

但是,当我解码JSON字符串时,属性将解析为一个对象 ,因此不会引发任何错误!

验证者规则是否可能对对象使用另一种符号?

如果不可能验证对象,我想我只是将每个对象转换为一个关联数组。

好的,解决方案是调用我的json_decode函数,例如json_decode($request->create, true) 将第二个参数设置为true该函数会将每个JSON对象转换为一个关联数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM