---
title: 'Laravel и валидация массивов'
url: 'https://graker.ru/news/2019/05/29/laravel-array-validation'
language: ru
type: post
author: 'Роман Грачев'
published: '2019-05-29T18:05:00+03:00'
updated: '2019-05-29T18:12:13+03:00'
categories:
  - Laravel
  - Программирование
---

# Laravel и валидация массивов

В Ларавеле довольно удобно сделана валидация данных во входящих запросах. С её помощью можно валидировать даже массивы, в том числе и вложенные. Документация на этот счет [слегка лаконична](https://laravel.com/docs/5.8/validation#validating-arrays), поэтому позволю себе небольшой пример.

Допустим, мы хотим принять массив с переменным количеством элементов, а в каждом элементе чтобы были поля `id` и `weight`. Вот так:

```
[
  'items' => [
    ['id' => 1, 'weight' => 5],
    ['id' => 5, 'weight' => 4],
    ['id' => 7, 'weight' => 3],
    ['id' => 8, 'weight' => 2],
    ['id' => 9, 'weight' => 1],
    // ...
  ],
]
```

Тогда нам нужно, чтобы поле `items` в запросе — присутствовало и было массивом, а значения `id` и `weight` — присутствовали и были целыми числами. Валидируется это так:

```
$data = $request->validate([
    'items' => 'array|required',
    'items.*.id' => 'integer|required',
    'items.*.weight' => 'integer|required',
]);
```

Таким образом будет отсечено все кроме поля `items`, в котором во всех элементах останутся только поля `id` и `weight`. Если по какому-то из значений вложенных элементов будут ошибки, то в `errors` они попадут с ключами `items.i.id` и `items.i.weight`, где `i` — индекс элемента в массиве `items`.
