Есть контактная форма, в которой возможна загрузка по настройкам неограниченного кол-ва файлов.
В alter_form поставлена проверка на кол-во файлов, например, не менее 2 шт. Когда я загружаю файлы, срабатывает валидатор формы - я вижу в массиве $form_state->getValues()['field_original_file'][0]['fids'] два элемента. Нажимаю отправить форму, снова срабатывает валидатор, но в массиве уже один(!) элемент.
Естественно, вылетает ошибка. Как такое возможно?
Почему с контактной формы при отправке пропадают файлы?
Главные вкладки
Лучший ответ
Посмотрел внимательней, всё оказалось иначе.
Вот так вытащил ид файлов и всё сразу стало понятно:
$fids = $values['field_original_file'];
$arrFIDs = [];
foreach ($fids as $el) {
foreach ($el['fids'] as $fid) {
$arrFIDs[] = $fid;
}
}
Комментарии
Второе имя Drupal 8 - "возможно все"
Не только form_alter, можно любой сервис заменить и MySQL на MS Excel.
Пока мы точно не знаем, что там у Вас еще "*_alter" , строить какие либо предположения - контрпродуктивно-)
Посмотрел внимательней, всё оказалось иначе.
Вот так вытащил ид файлов и всё сразу стало понятно:
Не совсем понятно как это помогло.. но помогло и здорово-)
только код выше можно сильно сократить:
<?php
$arrFIDS= array_column($values['field_original_file'],'fids');
?>
http://php.net/manual/ru/function.array-column.php
ЗЫ.. фуф.. никто не заметил как я лоханулся.. фидс же тоже массив, который надо слить в один-)
тогда так:
<?php
$result=[];
foreach(array_column($values['field_original_file'],'fids') as $fids){
$result=array_merge($result,$fids);
}
?>