Почему с контактной формы при отправке пропадают файлы?

Аватар пользователя pingvin156 pingvin156 13 декабря 2018 в 14:03

Есть контактная форма, в которой возможна загрузка по настройкам неограниченного кол-ва файлов.
В alter_form поставлена проверка на кол-во файлов, например, не менее 2 шт. Когда я загружаю файлы, срабатывает валидатор формы - я вижу в массиве $form_state->getValues()['field_original_file'][0]['fids'] два элемента. Нажимаю отправить форму, снова срабатывает валидатор, но в массиве уже один(!) элемент.
Естественно, вылетает ошибка. Как такое возможно?

0 Thanks

Лучший ответ

Аватар пользователя pingvin156 pingvin156 13 декабря 2018 в 18:51

Посмотрел внимательней, всё оказалось иначе.
Вот так вытащил ид файлов и всё сразу стало понятно:

$fids = $values['field_original_file'];
$arrFIDs = [];
foreach ($fids as $el) {
foreach ($el['fids'] as $fid) {
$arrFIDs[] = $fid;
}
}

Комментарии

Аватар пользователя Orion76 Orion76 13 декабря 2018 в 15:20

Второе имя Drupal 8 - "возможно все"
Не только form_alter, можно любой сервис заменить и MySQL на MS Excel.

Пока мы точно не знаем, что там у Вас еще "*_alter" , строить какие либо предположения - контрпродуктивно-)

Аватар пользователя pingvin156 pingvin156 13 декабря 2018 в 18:51

Посмотрел внимательней, всё оказалось иначе.
Вот так вытащил ид файлов и всё сразу стало понятно:

$fids = $values['field_original_file'];
$arrFIDs = [];
foreach ($fids as $el) {
foreach ($el['fids'] as $fid) {
$arrFIDs[] = $fid;
}
}

Аватар пользователя Orion76 Orion76 13 декабря 2018 в 22:01

ЗЫ.. фуф.. никто не заметил как я лоханулся.. фидс же тоже массив, который надо слить в один-)

тогда так:

<?php
$result
=[];
foreach(
array_column($values['field_original_file'],'fids') as $fids){
 
$result=array_merge($result,$fids);
}
?>