function NestedConfigTargetForm::buildForm
Same name and namespace in other branches
- 10 core/modules/system/tests/modules/form_test/src/Form/NestedConfigTargetForm.php \Drupal\form_test\Form\NestedConfigTargetForm::buildForm()
Overrides TreeConfigTargetForm::buildForm
File
-
core/
modules/ system/ tests/ modules/ form_test/ src/ Form/ NestedConfigTargetForm.php, line 34
Class
- NestedConfigTargetForm
- Test form for testing config targets that are not 1:1.
Namespace
Drupal\form_test\FormCode
public function buildForm(array $form, FormStateInterface $form_state) {
$form['favorites'] = [
'#type' => 'details',
'#open' => TRUE,
'#tree' => TRUE,
'#title' => 'Favorite fruits',
];
$form['favorites']['first'] = [
'#type' => 'textfield',
'#title' => 'First choice',
'#config_target' => new ConfigTarget('form_test.object', 'favorite_fruits', fromConfig: fn(?array $favorite_fruits): string => $favorite_fruits[0] ?? 'Mango', toConfig: fn(string $first, FormStateInterface $form_state): array => [
0 => $first,
1 => $form_state->getValue([
'favorites',
'second',
]),
]),
];
$form['favorites']['second'] = [
'#type' => 'textfield',
'#title' => 'Second choice',
'#config_target' => new ConfigTarget('form_test.object', 'favorite_fruits.1', fn(?string $second_favorite_fruit): string => $second_favorite_fruit ?? 'Orange', fn() => ToConfig::NoOp),
];
$form['could_not_live_without'] = [
'#weight' => 10,
'#type' => 'textfield',
'#title' => 'I could not live without',
'#placeholder' => 'vegetables',
'#wrapper_attributes' => [
'class' => [
'container-inline',
],
],
'#config_target' => new ConfigTarget('form_test.object', 'could_not_live_without', toConfig: function (string $could_not_live_without, FormStateInterface $form_state) : ToConfig|string {
if (empty($form_state->getValue([
'favorites',
'first',
]))) {
return ToConfig::DeleteKey;
}
if (empty($form_state->getValue([
'favorites',
'second',
]))) {
return ToConfig::DeleteKey;
}
if (empty($form_state->getValue([
'vegetables',
'favorite',
]))) {
return ToConfig::DeleteKey;
}
if (empty($form_state->getValue([
'vegetables',
'nemesis',
]))) {
return ToConfig::DeleteKey;
}
return $could_not_live_without;
}),
// Only if everything else is answered will this be asked.
'#states' => [
'visible' => [
// 2 favorite fruits.
':input[name="favorites[first]"]' => [
'empty' => FALSE,
],
':input[name="favorites[second]"]' => [
'empty' => FALSE,
],
// Favorite & nemesis vegetable.
':input[name="vegetables[favorite]"]' => [
'empty' => FALSE,
],
':input[name="vegetables[nemesis]"]' => [
'empty' => FALSE,
],
],
],
];
return parent::buildForm($form, $form_state);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.