Используя Laravel, есть ли способ выполнить проверку для одного вызова ajax с данными для нескольких моделей?

Предполагая, что в JSON можно одновременно разместить несколько наборов данных одной модели, можно вставить их с помощью функции Eloquent Model::create(). Однако в моем случае мне также необходимо проверить эти данные.

Validator принимает только объект Request в качестве входных данных, и, насколько я видел, я не могу создать новый экземпляр Request только с одной моделью.

Предполагая, что это будут входные данные (JSON), а index - это значение, которое браузер должен знать, какие данные принадлежат какому элементу (поскольку у них нет уникального идентификатора, назначенного в точке создания).

[
    {
        "index" : 1,
        "name"  : "Item 1",
        "value" : "Some description"
    },
    {
        "index" : 2,
        "name"  : "Item 2",
        "value" : "Something to describe item 2"
    },
    (and so on)
]

Каждый объект в корневом массиве должен проходить через один и тот же валидатор. Правила этого определены в Model::$rules (публичный статический массив).

Будет ли способ запустить валидатор для каждого элемента и, возможно, зафиксировать ошибки для каждого элемента?

1 ответ

Решение

Вы можете использовать Validator для ручной проверки:

...
use Validator;
...
$validator = Validator::make(
    json_decode($data, true), // where $data contains your JSON data string
    [
        // List your rules here using wildcard syntax.
        '*.index' => 'required|integer',
        '*.name' => 'required|min:2',
        ...
    ],
    [
        // Array of messages for validation errors.
        ...
    ],
    [
        // Array of attribute titles for validation errors.
        ...
    ]
);

if ($validator->fails()) {
    // Validation failed.
    // $validator->errors() will return MessageBag with what went wrong.    
    ...
}

Вы можете прочитать больше о проверке массивов здесь.

Другие вопросы по тегам