Какие данные я отправляю неправильно? - PullRequest
0 голосов
/ 03 мая 2019

Мой входящий объект JSON:

{
    "date": "2018-10-10", 
    "fiche": 1, 
    "fiche_type": 2, 
    "description": "test", 
    "project_code": "444", 
    "invoces": 
    [
        {
            "id": 1,
            "description": "Ol",
            "amount": 300,
            "type": "debit"
        },
        {
            "id": 2,
            "type" :"credit",
            "description": "Ol2",
            "amount": 200
        }
    ]
}

Правила проверки:

public function rules()
{

    return [
        'date' => 'required|date_format:Y-m-d',
        'fiche' => 'required|integer',
        'fiche_type' => 'required|integer',
        'description' => 'string',
        'project_code' => 'string',
        'invoices' => 'required|array',
        'invoices.id' => 'required|integer',
        'invoices.description' => 'string',
        'invoices.amount' => 'required|numeric',
        'invoices.type' => 'required|string',
    ];
}

Я всегда получаю общую ошибку, как: Неправильная проверка данных

1 Ответ

3 голосов
/ 03 мая 2019

Если вы внимательно ознакомились со своими правилами валидации, в частности:

return [
    // ...
    'invoices' => 'required|array',
    'invoices.id' => 'required|integer', // <---
    'invoices.description' => 'string', // <---
    'invoices.amount' => 'required|numeric', // <---
    'invoices.type' => 'required|string', // <---
];

При такой настройке что-то вроде этого должно пройти проверку (по крайней мере, эту часть):

$invoices = [
        'id' => 123,
        'description' => 'a description',
        'amount' => 123,
        'type' => 'a type',
    ];

но это не то, что вам нужно .. вам действительно нужно проверить массив элементов (массив) с такой структурой:

$invoices = [
    [
        'id' => 123,
        'description' => 'a description',
        'amount' => 123,
        'type' => 'a type',
    ],
    [
        'id' => 345,
        'description' => 'another description',
        'amount' => 156,
        'type' => 'another type',
    ],
];

Итак ... в чем проблема?

Что ж, перед ключами элементов вам нужно получить доступ к ключу самого элемента , но, учитывая, что эти правила будут применяться к каждому элементу в массиве, который вам нужен для использования подстановочного знака. Как сказано в документации:

Вы также можете проверить каждый элемент массива. Например, чтобы проверить, что каждое электронное письмо в данном поле ввода массива уникально, вы может делать следующее:

$validator = Validator::make($request->all(), [
    'person.*.email' => 'email|unique:users',
    'person.*.first_name' => 'required_with:person.*.last_name',
]);

Аналогично, вы можете использовать символ * при указании вашей проверки сообщения в ваших языковых файлах, что делает использование одного сообщение проверки для полей на основе массива:

'custom' => [
    'person.*.email' => [
        'unique' => 'Each person must have a unique e-mail address',
    ] ],

Итак, в вашем случае:

return [
    // ...
    'invoices' => 'required|array',
    'invoices.*.id' => 'required|integer', // <---
    'invoices.*.description' => 'string', // <---
    'invoices.*.amount' => 'required|numeric', // <---
    'invoices.*.type' => 'required|string', // <---
];

Ознакомьтесь с разделом Проверочные массивы документации.

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