Laravel проверяет итерации массива - PullRequest
0 голосов
/ 09 мая 2018

Я отправил массив из своей формы с помощью javascript, который получает значения из разных полей ввода и затем сохраняет его в одной переменной.

<input type="hidden" name="details" id="details">

JS

document.querySelectorAll('form')[1].addEventListener('submit', function(event) {
    var details = [];
    for (var i = 0; i < {{ $event->grocery->items()->count() }}; i++) {
        details[i] = [
            document.querySelectorAll('.store')[i].value,
            document.querySelectorAll('.item')[i].value,
            document.querySelectorAll('.quantity')[i].value,
            document.querySelectorAll('.brand')[i].value,
            document.querySelectorAll('.size')[i].value,
        ];
    }

    document.querySelector('#details').value = JSON.stringify(details);
});

Затем в моем контроллере я декодирую массив, используя json_decode

$request->details = json_decode($request->details);

Теперь я хочу проверить каждую итерацию (просто чтобы проверить, пуста она или нет). Итак, мне нравится,

$request->validate([
    ...
    'details.*.*' => 'required'
]);

Но моя проблема в том, что это ничего не делает. Даже если я отправил пустую итерацию, она продолжится без возврата ошибки.

Я что-то здесь не так делаю? Пожалуйста, помогите мне.

Обновление

Пример var var dumping details

array:3 [▼
  0 => array:5 [▼
    0 => "Grocery"
    1 => "Grocery"
    2 => "Grocery"
    3 => "Grocery"
    4 => "Grocery"
  ]
  1 => array:5 [▼
    0 => "Grocery"
    1 => "Grocery"
    2 => "Grocery"
    3 => "Grocery"
    4 => "Grocery"
  ]
  2 => array:5 [▼
    0 => "Grocery"
    1 => "Grocery"
    2 => "Grocery"
    3 => "Grocery"
    4 => "Grocery"
  ]
]

1 Ответ

0 голосов
/ 09 мая 2018

Было бы проще, если бы вы назвали значения вашего массива

document.querySelectorAll('form')[1].addEventListener('submit', function(event) {
    var details = [];
    for (var i = 0; i < {{ $event->grocery->items()->count() }}; i++) {
        details[i] = {
            store: document.querySelectorAll('.store')[i].value,
            item: document.querySelectorAll('.item')[i].value,
            quantity: document.querySelectorAll('.quantity')[i].value,
            brand:document.querySelectorAll('.brand')[i].value,
            size: document.querySelectorAll('.size')[i].value,
        };
    }

    document.querySelector('#details').value = JSON.stringify(details);
});

Проверка будет выглядеть так:

$request->validate([
    ...
    'details.*.store' => 'required',
    'details.*.item' => 'required',
    'details.*.quantity' => 'required',
    'details.*.brand' => 'required',
    'details.*.size' => 'required'
]);

Но если он вам не подходит, всегда есть Пользовательские правила проверки Laravel

EDIT

Я думаю, возможно, проблема в обновлении ваших данных:

$request->details = json_decode($request->details);

Вместо этого вам следует изменить ваш ввод для проверки и Изменить ввод перед проверкой запроса формы

$request->request->set('details', json_decode($request->details));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...