Php 在验证之前编辑请求数据

Php 在验证之前编辑请求数据,php,laravel,Php,Laravel,请求数据: 我想做什么 我正在尝试创建一个if语句,以检查 $request->invoice_data['discount']==null然后将其设置为0 $request->product\u credit['discount']==null然后将其设置为0 在验证过程之前,因为验证将失败。 我所尝试的: 我在Laravel中找到了一个名为prepareForValidation()的方法,它使用$this->merge([…])这是我正在寻找的,但问题是我无法在发票\u数据和产品\u信用中

请求数据:

我想做什么

我正在尝试创建一个
if语句
,以检查

$request->invoice_data['discount']==null
然后将其设置为0

$request->product\u credit['discount']==null
然后将其设置为0

在验证过程之前,因为验证将失败。

我所尝试的:


我在Laravel中找到了一个名为
prepareForValidation()
的方法,它使用
$this->merge([…])
这是我正在寻找的,但问题是我无法在
发票\u数据
产品\u信用
中访问折扣

设置属性默认值的更干净的方法,而不是在请求有效负载中编辑:

<?php

$data =
[
        "invoice_data" => [
            "discount" => null,
        ],
        "product_credit" => [
            "discount" => null,
        ]
    ];

$keyWhitelist = [
    'invoice_data',
    'product_credit'
];

foreach ($data as $key => $entry) {

    if(!in_array($key, $keyWhitelist)) {
        continue;
    }

    if(key_exists('discount',$entry)) {
        if ($entry['discount'] === null) {
            $data[$key]['discount'] = 0;
        }
    }
}

var_export($data);
Model {
   protected $attributes = [
      'inovice_data' => 0,
      'discount' => 0,
      'product_credit' => 0
   ];
}

这样,如果没有提供值,或者未定义值或null,Eloquent将在数据库中填充时将这些属性设置为已定义的默认值。

不熟悉laravel,但我会搜索类似“中间件”的东西来处理请求
array (
  'invoice_data' => 
  array (
    'discount' => 0,
  ),
  'product_credit' => 
  array (
    'discount' => 0,
  ),
)
Model {
   protected $attributes = [
      'inovice_data' => 0,
      'discount' => 0,
      'product_credit' => 0
   ];
}