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

Аватар пользователя pingvin156

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

Тип материала:
Версия Drupal:
0 Thanks

Лучший ответ

Аватар пользователя pingvin156
pingvin156 1 месяц назад

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

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

Комментарии

Аватар пользователя Orion76
Orion76 1 месяц назад

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

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

Аватар пользователя pingvin156
pingvin156 1 месяц назад

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

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

Аватар пользователя Orion76
Orion76 1 месяц назад

Не совсем понятно как это помогло.. но помогло и здорово-)

только код выше можно сильно сократить:

<?php
$arrFIDS
array_column($values['field_original_file'],'fids');
?>

http://php.net/manual/ru/function.array-column.php

Аватар пользователя Orion76
Orion76 1 месяц назад

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

тогда так:

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