I'm trying to wrap checkboxes
element in details
by doing something like this:
function pf_form_user_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
$config = \Drupal::config('pf.settings.notifications');
$form['pf'] = [
'#type' => 'details',
'#title' => t('Notification for updates in specific languages'),
'#description' => t('Expect getting one to two emails weekly'),
'#open': true,
];
$form['pf']['pf.notifications.checkboxes'] = [
'#type' => 'checkboxes',
'#title' => t('Check the ones you\'d like to recieve!'),
'#options' => [
'de' => t('german'),
'en' => t('english'),
],
'#default_value' => [
'de' => $config->get('de'),
'en' => $config->get('en'),
],
];
$form['actions']['submit']['#submit'][] = 'pf_form_user_form_submit';
}
but on submit, I get constantly back $values = ['de'=>0, 'en'=>0]
:
function pf_form_user_form_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
$values = $form_state->getValue('pf.notifications.checkboxes');
$config = \Drupal::config('pf.settings.notifications');
$config
->set('de', $values['de'])
->set('en', $values['en'])
->save()
;
}
As soon as I don't use the wrapping details
form element, data (value==key for checked elements) is there. Like this:
function pf_form_user_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
....
// $form['pf'] = [ commented out
$form['pf.notifications.checkboxes'] = ...
....
Inspecting $form_state
with debugger shows the same. Zeroes in first case, ok data in second.
Am I missing something? How does grouping of form elements work?
I inspected the $form_state
through the debugger more thoroughly, and I noticed some of the keys were in original, with dots 'pf.notifications.checkboxes'
while in other places, substitution for underscores took place and the key was 'pf_notifications_checkboxes'
.
Works with underscores.