/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
// get form config.
$config = $this->config('MYMODULE.settings');
// Set our count. Used in for loop below.
if (!empty($form_state->getValue(['fieldset', 'field_count']))) {
// get $form_state count value.
$defaultCount = $form_state->getValue(['fieldset', 'field_count']);
}
else {
// Get config count value.
$defaultCount = $config->get('field_count');
}
$form['#tree'] = TRUE;
// Fieldset item.
$form['fieldset'] = [
'#type' => 'fieldset',
'#prefix' => '<div id="fieldset-wrapper">',
'#suffix' => '</div>',
];
// Field count item.
$form['fieldset']['field_count'] = [
'#type' => 'number',
'#title' => 'Number',
'#required' => TRUE,
'#default_value' => $config->get('field_count') ?: 1,
];
// Rebuild submit item.
$form['fieldset']['rebuild'] = [
'#type' => 'submit',
'#value' => 'Apply number',
'#submit' => ['::rebuildFormSubmit'],
'#ajax' => [
'callback' => '::fieldCallback',
'wrapper' => 'fieldset-wrapper',
],
];
// Loop through our count and create form items.
for ($i = 0; $i < $defaultCount; $i++) {
$form['fieldset']['field'][$i] = [
'#type' => 'textfield',
'#default_value' => isset($config->get('field''script')[$i]) ? $config->get('script')[$i] : '',
];
}
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function fieldCallback(array &$form, FormStateInterface $form_state) {
return $form['fieldset'];
}
/**
* {@inheritdoc}
*/
public function rebuildFormSubmit(array &$form, FormStateInterface $form_state) {
$form_state->setRebuild(TRUE);
}
It is important to useThis part in the $form['fieldset']['rebuild']
:
In the $form['fieldset']['rebuild']
, along with:
Or you will get a Notice of undefined index from:Are the ajax options.
'#default_value' => $config->get('field')[$i] ?: '',