FileUploader
Общее
Сервис для загрузки файлов.
Из-за особенностей работы класса EntityObject
значения пользовательских полей типа "Файл" хранятся в виде числа (int).
Соответственно, на момент записи значения в объект элемента файл уже должен быть сохранен в базе данных.
При этом возможна ситуация, что файл был сохранен, но сам элемент не был сохранен. В этом случае необходимо обязательно удалить "подвисший" файл.
За эти манипуляции отвечает данный сервис.
Инстанс сервиса должен получаться из контейнера.
При создании объекта он регистрирует функцию (через register_shutdown_function
), которая будет выполнена при завершении работы php-процесса
. Эта функция удалит все несохраненные файлы.
Жизненный цикл выглядит следующим образом:
- Есть данные о файле, который надо сохранить для элемента. Файл сохраняется через метод
saveFileTemporary
. - Во время сохранения элемента будет вызван метод
markFileAsPersistent
. - Если элемент не был сохранен, то файлы, не помеченные как сохраненные, будут удалены.
Этот жизненный цикл работает в REST и методе Item::setFromCompatibleData
.
Методы
Метод | Описание | С версии |
---|---|---|
public function saveFileTemporary(Field $field, array $fileData): ?int
|
Сохранит данные о файле $fileData для поля $field. В случае успеха вернет ид нового файла. | |
public function markFileAsPersistent(int $fileId): self |
Пометит файл с идентификатором $fileId как сохраненный (который не надо удалять). | |
public function deleteTemporaryFiles(): self |
Удалит все временные файлы. | |
public function saveFilePersistently(Field $field, array $fileData): ?int |
Сохранит файл сразу на постоянной основе. Аргументы аналогичны методу saveFileTemporary . |
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.