【问题标题】:drupal 7 presist data in form_state with managed_filedrupal 7 presist data in form_state with managed_file
【发布时间】:2013-04-26 07:52:45
【问题描述】:

我使用 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 数据

但是使用起来有点麻烦。

【问题讨论】:

    标签: forms file-upload drupal-7


    【解决方案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);
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      相关资源
      最近更新 更多