Перед началом
Перед новым типом проверьте существующие поля. Часто задачу закрывают список, изображение или повторяемая группа без нового backend-кода.
Порядок действий
- Для создания и изменения записей вызывайте штатный IblockService. Он проверяет входные значения и поддерживает связи материала.
- Собственные значения перед записью должны проходить
Fields::prepareForSave(), типовые validate и prepareValue. - Храните управляемые файлы как относительные пути внутри upload. Перед физическим удалением проверяйте нормализацию, realpath и границу корня.
- Очищайте заменённый ресурс после успешного сохранения через общий lifecycle поля. Загрузка нового файла не должна заранее удалять старый.
- Проверьте пустое значение, ошибку валидации, замену файла, неудачную запись и повторное открытие формы.
Обратите внимание. Не меняйте тип и target существующего поля обычным update. Миграция данных должна учитывать прежние значения и возможные ошибки схемы.
Проверьте результат
Невалидные данные не сохраняются, старый файл остаётся при ошибке, после успеха очищается только заменённый управляемый ресурс.