我使用 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),
),
);
我试过了:
我在表单验证器、提交和表单中通过引用传递 &$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) 用于持久化 form_state 数据
但是使用起来有点麻烦。