View source  
  <?php
namespace Drupal\file_module_test\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
class FileModuleTestForm extends FormBase {
  
  public function getFormId() {
    return 'file_module_test_form';
  }
  
  public function buildForm(array $form, FormStateInterface $form_state, $tree = TRUE, $extended = TRUE, $multiple = FALSE, $default_fids = NULL) {
    $form['#tree'] = (bool) $tree;
    $form['nested']['file'] = array(
      '#type' => 'managed_file',
      '#title' => $this
        ->t('Managed <em>@type</em>', [
        '@type' => 'file & butter',
      ]),
      '#upload_location' => 'public://test',
      '#progress_message' => $this
        ->t('Please wait...'),
      '#extended' => (bool) $extended,
      '#size' => 13,
      '#multiple' => (bool) $multiple,
    );
    if ($default_fids) {
      $default_fids = explode(',', $default_fids);
      $form['nested']['file']['#default_value'] = $extended ? array(
        'fids' => $default_fids,
      ) : $default_fids;
    }
    $form['textfield'] = array(
      '#type' => 'textfield',
      '#title' => $this
        ->t('Type a value and ensure it stays'),
    );
    $form['submit'] = array(
      '#type' => 'submit',
      '#value' => $this
        ->t('Save'),
    );
    return $form;
  }
  
  public function submitForm(array &$form, FormStateInterface $form_state) {
    if ($form['#tree']) {
      $uploads = $form_state
        ->getValue(array(
        'nested',
        'file',
      ));
    }
    else {
      $uploads = $form_state
        ->getValue('file');
    }
    if ($form['nested']['file']['#extended']) {
      $uploads = $uploads['fids'];
    }
    $fids = array();
    foreach ($uploads as $fid) {
      $fids[] = $fid;
    }
    drupal_set_message($this
      ->t('The file ids are %fids.', array(
      '%fids' => implode(',', $fids),
    )));
  }
}