Почему загрузка файлов не работает в Drupal 7? - PullRequest
1 голос
/ 14 марта 2012

У меня есть пользовательский модуль, и я хочу поле для загрузки изображения. Похоже, что Chrome загружает файл, но он не работает, и я получаю сообщение об ошибке ниже. Может кто-нибудь указать мне правильное направление?

function nafa_adoption_form($form_state)
{
  $form['#attributes'] = array('enctype' => "multipart/form-data");

  ...

  $form['picture'] = array(
    '#type' => 'file',
    '#title' => t('Picture'),
    '#size' => 20,
    '#upload_location' => 'public://uploads'
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );




  return $form;
}

Отправить функцию:

function nafa_adoption_form_submit($form, &$form_state) 
{


  dvm($form_state['values']); //field 'picture' is blank

  $file = file_load($form_state['values']['picture']);

  $file->status = FILE_STATUS_PERMANENT;

  file_save($file);

  $fileid = file_load($file);

  variable_set('adoption_picture', $fileid->uri);

  if ($file)
  {
    drupal_set_message("File uploaded ");
  }

  else
  {
    drupal_set_message("File could not be uploaded");
  }

  drupal_set_message(t('Your form has been saved.'));
}

Я также получаю следующую ошибку:

Notice: Undefined property: stdClass::$uri in file_save() (line 573 of /home/amn7940/nafa.achristiansen.com/includes/file.inc).

1 Ответ

1 голос
/ 14 марта 2012

Если вы посмотрите на документы для элемента file типа , вы заметите, что свойства #upload_location нет.Это связано с тем, что при использовании типа file ожидается, что вы сами переместите временный файл в постоянное местоположение.

Из кода, который вы используете в функции отправки, я почти уверен, что вы ищетедля типа managed_file.Если вы используете это вместо этого, ваш код должен начать работать отлично:

$form['picture'] = array(
  '#type' => 'managed_file',
  '#title' => t('Picture'),
  '#size' => 20,
  '#upload_location' => 'public://uploads'
);
...