我目前正在为一家汽车经销商、小型学校项目开发API。
在CarController中,我正在处理添加汽车的POST请求,并且在数据验证方面遇到了一些问题。
这是我将收到的数据样本:
{
"model": "Q5",
"brand": "Audi",
"year": 2008,
"price": 44000,
"color": "blue",
"traction": "4x4",
"motor": {
"type": "gasoline",
"hp": 256,
"turbo": false,
"cylinders": 4,
"motor_liters": 2.0
},
"user_id": 1
}
考虑到格式,我写了这样的验证:
$request->validate([
'model' => 'required|string',
'brand' => 'required|string',
'year' => 'required|integer',
'price' => 'required|numeric',
'color' => 'required|string',
'traction' => 'required|string',
'motor' => [
'type' => 'required|string',
'hp' => 'required|integer',
'turbo' => 'required|boolean',
'cylinders' => 'required|integer',
'motor_liters' => 'required|numeric'
],
'user_id' => 'required|integer'
]);
然而,当提出请求时,它会从验证器中给我以下错误:
BadMethodCallException: Method IlluminateValidationValidator::validateRequired|string does not exist.
在这一点上,我不知道这是打字错误、格式错误,还是我必须以不同的方式处理嵌套的JSON,因为我有一个UserController,它的POST请求看起来像这样:
$request->validate([
'username' => 'required|string|min:5',
'password' => 'required|string'
]);
而且效果非常好。
如果你想自己尝试API,这里有回购的链接。
要验证嵌套字段,必须使用点表示法,而不是嵌套数组:
$request->validate([
'model' => 'required|string',
'brand' => 'required|string',
'year' => 'required|integer',
'price' => 'required|numeric',
'color' => 'required|string',
'traction' => 'required|string',
'motor.type' => 'required|string',
'motor.hp' => 'required|integer',
'motor.turbo' => 'required|boolean',
'motor.cylinders' => 'required|integer',
'motor.motor_liters' => 'required|numeric',
'user_id' => 'required|integer'
]);