我有一个验证块,如下所示:
$this->validate($request, [
'id' => 'required|string|unique:user,id|max:32',
'email' => 'required|email|max:191',
'name' => 'nullable|string',
'birthDate' => 'nullable|date_format:Y-m-d',
'countryId' => 'nullable|integer',
'city' => 'nullable|string|max:191',
'address' => 'nullable|string',
'zipCode' => 'nullable|string|max:191',
'phone' => 'nullable|string',
]);
我正在发送这样的数据:
{
"id": "nJy8zWQ6VuptDFNA",
"email": "email@email.com",
"name": "name",
"birthDate": "1980-01-01",
"countryId": 1481,
"city": "a city",
"address": "this is an address",
"zipCode": "123400",
"phone": 09876554321
}
我正在发送 phone 字段作为不正确的数据类型。那么响应就像 phone 字段的类型错误。
但是我得到这个回应:
{
"id": [
"The id field is required."
],
"email": [
"The email field is required."
]
}
我在这里找不到问题。
答案 0 :(得分:1)
问题是您没有发送有效的JSON正文。
此代码:
$json = <<<JSON
{
"id": "nJy8zWQ6VuptDFNA",
"email": "email@email.com",
"name": "name",
"birthDate": "1980-01-01",
"countryId": 1481,
"city": "a city",
"address": "this is an address",
"zipCode": "123400",
"phone": 09876554321
}
JSON;
json_decode($json);
echo json_last_error();
将回显4作为JSON_ERROR_SYNTAX
的代码,这意味着语法错误。
错误是JSON中的数字不能以0为前缀。可能是因为在JavaScript中,前缀0表示一个八进制数字,但是在JSON中允许此数字可能会损害可保留性。
不幸的是,PHP内置JSON解析器的默认行为是在语法错误时返回null,而没有其他说明。
这可能是Laravel的想法,允许作为验证的一部分来验证整个输入的格式是否正确,以确保我们可以检查发送的内容是否正确。
答案 1 :(得分:0)
电话号码缺少引号,从而使json无效。
答案 2 :(得分:0)
您应该为所有值添加"
(引号),而您却为phone
错过了它
应该是这样的
{
"id": "nJy8zWQ6VuptDFNA",
"email": "email@email.com",
"name": "name",
"birthDate": "1980-01-01",
"countryId": 1481,
"city": "a city",
"address": "this is an address",
"zipCode": "123400",
"phone": "09876554321"
}