Управляемый файл: файл, используемый в поле, может не ссылаться

У меня возникают некоторые проблемы с типом managed_file , Всякий раз, когда я пытаюсь редактировать и сохранять форму, в которой есть элемент managed_file, возникает ошибка: Файл, используемый в поле «Изображение», может не ссылаться.

Это код, который я использую:

function foo_form ($ form, & $ form_state, $ foo) {
  ...
  $ form ['file'] = массив (
    '#type' => 'Managed_file',
    '#title' => т ( 'Picture'),
    '#default_value' => (isset ($ foo-> file-> fid)? $ banner-> foo-> fid: ''),
    '#upload_location' => variable_get ( 'foo_upload_location'),
  );

  if (isset (файл $ foo->)) {
    $ form ['current_file'] = массив (
      '#type' => «Скрытый»,
      '#value' => $ Foo- > файл- > FID,
    );
  }
  ...
  $ form ['submit'] = массив (
    '#type' => 'Отправить',
    '#value' => т ( 'Сохранить'),
  );
  return $ form;
 }

function foo_form_submit ($ form, & $ form_state) {
  $ foo = (объект) $ form_state ['values'];

  $ current_file_set = isset ($ form_state ['values'] ['current_file']);

  if ($ form_state ['values'] ['file']! = 0 &! $ current_file_set) {
    //Загрузите файл, загруженный в форму.
    $ file = file_load ($ form_state ['values'] ['file']);

    $ file-> status = FILE_STATUS_PERMANENT;

    file_save ($ файла);

    $ foo-> file = $ file-> fid;
  } else if ($ form_state ['values'] ['file']! = 0 & & $ current_file_set) {

    //Если мы загружаем другое изображение, удалите старый и сохраните
    //новый. Если нет, ничего не делайте.
    if ($ form_state ['values'] ['current_file']! = $ form_state ['values'] ['file']) {
      file_delete (file_load ($ form_state [ 'значения'] [ 'current_file']));
      //Загрузите файл, загруженный в форму.
      $ file = file_load ($ form_state ['values'] ['file']);

      $ file-> status = FILE_STATUS_PERMANENT;

      file_save ($ файла);

      $ foo-> file = $ file-> fid;
    }
  } else {
    file_delete (file_load ($ form_state [ 'значения'] [ 'current_file']));
    $ foo-> file = null;
  }

  ...
}

Я проследил ошибку до file_managed_file_validate в modules /file /file.module , но ничего не знает о ссылках на файл.

37 голосов | спросил Bart 31 Maypm11 2011, 19:34:34

1 ответ


36

Решение состоит в том, чтобы добавить вызов file_usage_add после файл сохраняется. Этот вызов добавляет ссылку на файл в базе данных. Функция file_managed_file_validate будет указывать ссылку и выиграть ' t вызывает ошибку.

file_usage_add ($ file, 'foo', 'foo', $ foo-> id);

Это не задокументировано в API-интерфейсе формы в примере с параметром managed_file .

Эта проблема обсуждается в документации по документации Drupal: ссылка

ответил Bart 8 J0000006Europe/Moscow 2011, 13:50:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132