如何使用请求验证 JSON 输入? Laravel

How to Validate JSON Input using Requests? Laravel

我正在使用 formData 发送一些数据,对于一个字段(对象),我使用:JSON.stringify(this.allValues)。 我尝试验证 this.allValues 中的所有值。 到目前为止,我尝试了 here 中的 2 种方法,现在我尝试使用 "JsonApiMiddleware" 中的第二种方法。 但是有了这个我验证(必需)错误,即使字段不为空。

public function rules()
    {
        $newValues = json_decode(request()->get('all_values')); // Here I have all values that needs to be validated
        dd($newValues); // I post the respons for this below
        $newValues = [
               'saleforce_id'                    => 'required',
               'customer_id'                     => 'required',
        ]

        return $newValues;
}

""customer_id":49,"saleforce_id":"","lkp_invoicing_method_id":3,"lkp_product_category_id":10,"lkp_notice_period_id":5,"lkp_licence_term_id":9,"is_attrition_risk":false,"is_additional_users":false,"contract_value_exc_vat_annual":"257590...and many more

将您发送的 JSON 对象视为 php 关联数组。例如,假设您发送的数据如下所示。

/* var allValues = */
{
    data: {
        requiredField1: value,
        requiredField2: value,
        requiredArrayField1: [
            1,
            2,
            3,
        ],
        optionalField1: value
    }
}

然后,您可以像这样验证数据:

public function rules()
{
    return: [
        'data' => 'required|array',
        'data.requiredField1' => 'required',
        'data.requiredField2' => 'required',
        'data.requiredArrayField1' => 'required|array',
        'data.requiredArrayField1.*' => 'required|numeric',
        'data.optionalField1' => 'nullable',
    ];
}

我找到了解决办法。 我使用了 laracast 中的方法,fureszpeter,带有中间件的方法,并对其进行了编辑。

public function handle($request, Closure $next)
    {
        if ($request->has('all_values')) {
            $request->merge([
                'all_values' => json_decode($request->get('all_values'), true)
            ]);
        }  // only when I have all_values in my request

        return $next($request);
    }
}

在我现有的请求中:

public function rules()
{
    $newValues = [
               'all_values.saleforce_id'         => 'required'
               'all_values.customer_id'          => 'required',
               // and the rest of the files
    ]

    return $newValues
}