【问题标题】:Validation for an associative array in Laravel在 Laravel 中验证关联数组
【发布时间】:2016-01-20 14:03:08
【问题描述】:

我有一个像这样的 JSON 结构,我想验证它。

{
  "result":[{

            "product_id": 1,
            "client": 49,
            "ticket": 2,
            "sold_from_date": 1431588871,
            "sold_to_date": 1433122200,
            "discount_given":18,
            "cheques":[{
              "cheque_number" : 123456,
              "amount": 6000,
              "cheque_date": 1433122200,
              "bank": "UCD"
            },
            {"cheque_number" : 456234,
              "amount": 6000,
              "cheque_date": 1433122200,
              "bank": "AMB"
            }
            ]
        },
          {

            "product_id": 1,
            "client": 49,
            "ticket": 2,
            "sold_from_date": 1433122200,
            "sold_to_date": 1434688959
        }]
}

我想在 Laravel 中验证这个 JSON。

我试过这样做:

$validator = \Validator::make($data, []);

        $validator->each('result.product_id' , ['required|numeric']);
        $validator->each('result.sold_from_date' , ['required|numeric']);
        $validator->each('result.sold_to_date' , ['required|numeric']);
        $validator->each('result.cheques.cheque_number' , ['sometimes|required|numeric']);
        $validator->each('result.cheques.amount', ['sometimes|required|numeric']);

        return $validator;

我每次都收到这个错误:

each() 的属性必须是一个数组。

另外,我如何验证支票?因为它可以或不能是 JSON。

【问题讨论】:

  • 解决问题后,我读到每个方法都完成了任务。
  • 如何编写ProductValidator 类并遍历result 中的每个对象并将其传递给ProductValidator。如果一次失败,返回false
  • 是的,我也可以在这里完成。但是,这不是最好的方法。

标签: php json validation laravel


【解决方案1】:

使用json_decode 函数从json 创建一个array

试试:

$dataarray = json_decode($data);

$validator = \Validator::make($dataarray['result'][0], [
    'product_id' => 'required|numeric',
    'sold_from_date' => 'required|numeric'
]);

迭代数组:

$roles = array(
    'product_id' => 'required|numeric',
    'sold_from_date' => 'required|numeric'
);

foreach($data as $element)
{
    foreach($element as $value) {
        $validator = \Validator::make($value, $roles);
    }
}

【讨论】:

  • 我的意思是我已经在做$data = json_decode($input_data);
  • 编辑无效。 Missing argument 2 for Illuminate\Validation\Validator::each()
  • 我认为问题在于您向每个函数添加了一个多维数组。
  • 那么,会有什么影响呢?
  • 你添加到每个函数 $data["result"][0]
猜你喜欢
  • 2017-06-01
  • 2016-09-22
  • 1970-01-01
  • 2019-02-21
  • 2018-01-03
  • 1970-01-01
  • 2019-01-14
  • 2017-07-04
  • 2021-07-02
相关资源
最近更新 更多