1

我使用 D7 托管文件。

如果我有表单错误而不是表单丢失文件信息,我知道是否有错误必须重新上传文件。

但是在表单验证器中,我将文件保存在数据库中,所以我有文件的 FId(来自 file_load)

如果我可以在表单状态中保存值,我可以在表单提交中从 db 加载文件并使其持久化。

通知:

$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['values']['FileInfo'] = $form_state['values']['fileUpload'];

如果有表单错误 form_state 丢失了这个值

  1. 我在表单验证器、提交和表单中通过引用传递 &$form_state

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

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

  2. form_set_value($element, $value, &$form_state) 用于持久化 form_state 数据

但是使用起来有点麻烦。

4

1 回答 1

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);
    
于 2013-04-26T09:45:25.780 回答