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),
),
);
私は試した:
&$form_state をフォームバリデーター、サブミット、フォームで参照渡しします
$form_state['values']['FileInfo'] = $form_state['values']['fileUpload'];
フォーム エラー form_state がある場合、この値が失われます
&$form_state をフォームバリデーター、サブミット、フォームで参照渡しします
$file = file_load($form_state['values']['fileUpload']);
$form_state['values']['FileInfo'] = $form->fid;
form_set_value($element, $value, &$form_state) for persist form_state データ
でもちょっと使いづらい。