ブロックプラグイン用のフォームを作成しました。送信後に値をフォームに保存しようとしています。ただし、値が配列内にある場合、値の保存に問題があります。
例えば
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を使用して配列内の要素に到達する適切な方法は何ですか。または、使用する必要がある別の関数はありますか?
キーを配列に入れます。例:
$this->configuration['header']['margin-top-submit'] = $form_state->getValue(['header','margin-top']);
これは、drupal 8で何時間ものテストを行った結果、私にとってはうまくいきました。役に立てば幸いです。
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$is_live = $form_state->getValue('settings')['is_live '];
}