Сохранение файла, полученного через форму в Drupal

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

Обычно объявления форм в Drupal 8+ размещаются в виде расширений класса FormBase в каталоге модуля /scr/Form/*.

Этот пример содержит две проблемы.

Разрешаем нужные расширения

Первая связана с тем, что я намеренно разрешил загрузку только csv файлов, которых нет в «стандартном» списке разрешенных для функции file_save_upload.

Поэтому требуется задать нужный нам валидатор.

Временные файлы

Вторая проблема более серьёзная, она заключается в том, что файл сохраняется как временный. И через какое то время (типично — 8 часов) он может быть удален сборщиком мусора в друпал.

Чтобы избежать этого есть как минимум два пути:

Первый — это использование созданного файла в какой то другой сущности, через регистрацию связи сервисом ‘file.usage’.

Второй путь — это напрямую установить флаг permanent для только созданной сущности.

Мало букафф? Читайте есчо !

Как добавить css классы в attributes (twig, Drupal)

Май 16, 2024 г.

Порою требуется добавить свои классы в переменную attributes на уровне шаблона (в twig). Переменная attributes - это объект Drupal\Core\Template\Attribute. У него есть нужный нам метод - addClass(). Пример использования: [crayon-69f22a8c33eee782995964/]

Читать

Чем заменить drupal_get_path() в Drupal 9/10

Январь 9, 2024 г.

Функция считается устаревшей, начиная с версии ядра 9.3, в 10-й версии функция удалена из кода. В новом API нужно воспользоваться одним из сервисов ядра, которые реализуют нужную функцию. Сервис extension.list.module - реализует функции, связанные ...

Читать

Реализация формы поиска товаров

Май 11, 2023 г.

См. основной материал для введения. Форма в нашем случае не требует отправки/проверки данных, и реализует только два метода - getFormId и buildForm. Хотя форма и не содержит кнопки submit, но все равно будет реагировать на отправку данных, поэтому ...

Читать

Ошибка в Drupal: once is not a function

Май 8, 2023 г.

В Drupal 9/10 нет jQuery плагина once(), потому при использовании этой функции вы увидите сообщение о том, что once - не является функцией. Плагин удобен, но его не сложно заменить в коде буквально парой вставок. Он работает по следующему алгоритму ...

Читать
 

Комментарии к «Сохранение файла, полученного через форму в Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: