Валидация Laravel не выдает ошибку поля, которое действительно неисправно - PullRequest
0 голосов
/ 20 мая 2019

У меня есть блок проверки следующим образом:

$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 ]

1 голос
/ 20 мая 2019

Проблема в том, что вы не отправляете действительное тело 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, что означает синтаксисошибка.

Ошибка состоит в том, что номера не могут иметь префикс 0 в JSON.Вероятно, это связано с тем, что в JavaScript префикс с 0 указывает на восьмеричное число, но разрешение этого в JSON может ухудшить работоспособность.

К сожалению, поведение встроенного синтаксического анализатора PHP JSON по умолчанию - возвращать ноль при синтаксической ошибке, а нескажи что-нибудь еще об этом.

Это потенциально может быть идея Laravel, позволяющая проверить, что весь ввод правильно отформатирован JSON, как часть проверки, чтобы убедиться, что у нас есть средства проверки правильности того, что мы отправляем.

0 голосов
/ 20 мая 2019

Вы должны добавить " (кавычки) для всех значений, вы пропустили его для 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"
}
0 голосов
/ 20 мая 2019

В номере телефона отсутствуют кавычки, что делает JSON недействительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...