1

D7マネージドファイルを使用しています。

フォームが失われたファイル情報よりもフォームエラーがある場合、ファイルを再アップロードする必要があるエラーがあることがわかります。

しかし、フォームバリデーターでは、ファイルをデータベースに保存しているので、ファイルの FId を (file_load から) 取得しています。

フォーム状態で値を保持できる場合は、フォーム送信でデータベースからファイルをロードして、それを保持できます。

知らせる:

$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) for persist 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 に答える