我使用的是D7托管文件。
如果我的表单错误比表单丢失文件信息,我知道有一个错误,必须重新上传文件。
但是在表单验证器中我将文件保存在db中,所以我有文件的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),
),
);
我试过了:
我在表单验证器,提交和表单中通过引用传递& $ 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)
但使用它有点棘手。
答案 0 :(得分:1)
我找到了答案。
我在表单中创建一个隐藏字段:
$form['infoFile'] = array('#type' => 'hidden', '#value' => '');
:
$file = file_load($form_state['values']['candidateCvUpload']);
$form['infoFile']['#parents'] = array('infoFile');
form_set_value($form['infoFile'], $file->fid, $form_state);
提交
$file->status = FILE_STATUS_PERMANENT;
$file = file_save($file);