Laravel Validation不会抛出真正错误的字段的错误

时间:2019-05-20 10:46:31

标签: php laravel validation

我有一个验证块,如下所示:

$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."
    ]
}

我在这里找不到问题。

3 个答案:

答案 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"
}