2013-04-26 25 views
1

我使用D7託管文件。drupal 7在form_state中託管數據與managed_file

如果我的表單錯誤比表單丟失的文件信息,我知道有錯誤必須重新上傳文件。

但在形式驗證我有文件保存在DB中,所以我有該文件的FID(從file_load)

如果我能presist在形式狀態值i可以從分貝加載文件形式提交併保留。

在形式

$form['fileUpload'] = array(
     '#id'    => 'fileUploadId', 
     //'#type' => 'file', 
     '#title' => t('upload a file: '), 
     '#size'    => 22, 
     '#type'    => 'managed_file', 
     '#description'  => t('upload file: docx doc pdf'), 
     '#upload_location' => 'public://', 
     '#upload_validators' => array(
      'file_validate_extensions' => array('docx doc pdf'), 
      // Pass the maximum file size in bytes 
      'file_validate_size' => array(4*1024*1024), 
     ),    
    ); 

我嘗試:

  1. 我通過&通過形式驗證參考$ form_state,提交,和形式

    $ form_state [ '值' ] ['FileInfo'] = $ form_state ['values'] ['fileUpload'];

如果形狀誤差form_state失去了這個值

  1. 我通過在形式驗證的& $ form_state參考,提交和形式

    $文件= file_load($ form_state [ '值'] [ '文件上傳']);

    $ form_state ['values'] ['FileInfo'] = $ form-> fid;

  2. form_set_value($元,$值,& $ form_state)的持續form_state數據

但它是有點棘手使用。

回答

1

我找到了答案。

  1. 我在表單中創建一個隱藏字段:

     $form['infoFile'] = array('#type' => 'hidden', '#value' => ''); 
    
  2. 形式驗證

     $file = file_load($form_state['values']['candidateCvUpload']); 
         $form['infoFile']['#parents'] = array('infoFile'); 
         form_set_value($form['infoFile'], $file->fid, $form_state); 
    
  3. 提交

     $file->status = FILE_STATUS_PERMANENT; 
         $file = file_save($file);