2016-03-27 9 views
1

私は最初のdrupal 8モジュールを作成しようとしています。このモジュールでは、新しいフォームを作成して、この形式でユーザーにファイルアップロード機能を提供する必要があります。ここに私のフォームコントローラがある:私は私のフォームのページに移動するときDrupalで8つのファイルをアップロードする

class Make2d extends FormBase { 

    /** 
    * {@inheritdoc} 
    */ 
    public function getFormId() { 
    return 'make2d_form'; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(array $form, FormStateInterface $form_state) { 
    if (\Drupal::currentUser()->isAnonymous()) { 
     return new RedirectResponse(\Drupal::url('user.page')); 
    } 

    $form['sheet_size'] = array(
     '#type' => 'radios', 
     '#title' => t('Sheet Size'), 
     '#options' => array(t('10 X 10(2.99$)'), t('17 X 17(4.99$)'), t('28 X 28(5.99$)')), 
    ); 
    $form['uploaded_file'] = array(
     '#type' => 'file', 
     '#title' => t('Upload your file'), 
     '#required' => true 
    ); 
    $form['actions']['#type'] = 'actions'; 
    $form['actions']['submit'] = array(
     '#type' => 'submit', 
     '#value' => $this->t('Save to Cart'), 
     '#button_type' => 'primary', 
    ); 
    return $form; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function validateForm(array &$form, FormStateInterface $form_state) { 
    echo '<pre>'; 
    print_r($form_state->getvalues()); 
    echo '</pre>'; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function submitForm(array &$form, FormStateInterface $form_state) { 
    print_r($form_state['values']); 

    } 

} 

これが結果です:

image of my form

その後、私は自分のコンピュータからファイルを選択し、フォームを送信します。私は$ form_state->でgetValues()配列をしますprint_rときには結果がかなった。このようなものです:

Array 
(
    [sheet_size] => 0 
    [uploaded_file] => 
    [submit] => Drupal\Core\StringTranslation\TranslatableMarkup Object 
... 

あなたは[uploaded_file]空であることがわかります。ファイルのアップロードに関するフォームの上部にエラーがあります。フォームコントローラとファイルのアップロードに何が問題なのですか?ありがとう。

答えて

3

最後に!私はこれを見つけた。私たちはdrupalにアップロードされたファイルを管理させるために '#type' = 'managed_file'を使うべきです。 '#type' = 'file'を使用する場合は、file_save_upload()でファイルを転送する必要があります。

関連する問題