web-dev-qa-db-ja.com

getValueを使用して配列の値を取得するための構文

ブロックプラグイン用のフォームを作成しました。送信後に値をフォームに保存しようとしています。ただし、値が配列内にある場合、値の保存に問題があります。

例えば

public function blockForm($form, FormStateInterface $form_state){
    $form['plugins_string_text'] = array(
      '#type' => 'text_format',
      '#title' => $this->t('Block contents'),
      '#format' => 'full_html',
      '#description' => $this->t('This text will appear in the block.'),
      '#default_value' => $this->configuration['plugins_string_text-submit'],
    );

    $form['header']['margin-top'] = array(
        '#type' => 'textfield',
        '#title' => t('Margin Top (pixels)'),
        '#default_value' => $this->configuration['header']['margin-top-submit'],
        );
    $form['header']['margin-bottom'] = array(
        '#type' => 'textfield',
        '#title' => t('Margin Bottom (pixels)'),
        '#default_value' => $this->configuration['header']['margin-bottom-submit'],
        );
    $form['header']['margin-left'] = array(
        '#type' => 'textfield',
        '#title' => t('Margin Left (pixels)'),
        '#default_value' => $this->configuration['header']['margin-left-submit'],
        );
    $form['header']['margin-right'] = array(
        '#type' => 'textfield',
        '#title' => t('Margin Right (pixels)'),
        '#default_value' => $this->configuration['header']['margin-right-submit'],
        );
}

    public function blockSubmit($form, FormStateInterface $form_state) {
        $this->configuration['plugins_string_text-submit']  = $form_state->getValue('plugins_string_text');
        $this->configuration['header']['margin-top-submit'] = $form_state->getValue('header','margin-top');
        $this->configuration['header']['margin-bottom-submit'] = $form_state->getValue('header','margin-bottom');
        $this->configuration['header']['margin-right-submit'] = $form_state->getValue('header','margin-right');
        $this->configuration['header']['margin-left-submit'] = $form_state->getValue('header','margin-left');
}

これは適切にフォームに保存されます

$this->configuration['plugins_string_text-submit']  = $form_state->getValue('plugins_string_text');

ただし、以下の各行には、個々のマージン値ではなく、「ヘッダー」配列全体が表示されます。

$this->configuration['header']['margin-top-submit'] = $form_state->getValue('header','margin-top');
$this->configuration['header']['margin-bottom-submit'] = $form_state->getValue('header','margin-bottom');
$this->configuration['header']['margin-right-submit'] = $form_state->getValue('header','margin-right');
$this->configuration['header']['margin-left-submit'] = $form_state->getValue('header','margin-left');

GetValueを使用して配列内の要素に到達する適切な方法は何ですか。または、使用する必要がある別の関数はありますか?

5
Matt

キーを配列に入れます。例:

$this->configuration['header']['margin-top-submit'] = $form_state->getValue(['header','margin-top']);
18
Maouna

これは、drupal 8で何時間ものテストを行った結果、私にとってはうまくいきました。役に立てば幸いです。

public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    $is_live = $form_state->getValue('settings')['is_live '];
}
5
Orups Buoyant