Разработчикам · 2 МИН ЧТЕНИЯ

Расширение и сохранение полей

Соблюдайте обработку типов и очистку ресурсов при работе с инфоблоками.

Перед началом

Перед новым типом проверьте существующие поля. Часто задачу закрывают список, изображение или повторяемая группа без нового backend-кода.

Порядок действий

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

Проверьте результат

Невалидные данные не сохраняются, старый файл остаётся при ошибке, после успеха очищается только заменённый управляемый ресурс.

Скриншот инструкции