【问题标题】:Laravel array of objects validationLaravel 对象数组验证
【发布时间】:2018-05-06 11:52:41
【问题描述】:

我正在尝试在 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 的对象时,控制器不会抛出错误。

任何想法我做错了什么?


编辑

好的,在遵循 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 字符串时,属性会被解析为 object,因此不会引发任何错误!

验证器规则是否有可能对对象使用不同类型的表示法?

如果不能验证对象,我想我会把每个对象都转换成一个关联数组。

【问题讨论】:

  • 能否包含您发送的您认为无效的示例数据?
  • 检查你有有效的 json 吗?
  • 只测试样本数组而不是获取json并转换为数组,我相信它会工作,你需要检查你的转换代码
  • 你在return dd($request->all() );得到了什么?
  • @user2486 感谢您的帮助!我做了一些测试并更新了我的问题。

标签: php json laravel laravel-5.3 laravel-validation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 2019-02-08
    • 2016-08-10
    • 2021-08-21
    • 2022-11-25
    • 2017-10-15
    • 2015-10-24
    • 2021-08-17
    相关资源
    最近更新 更多