在 Drupal 8 中,我不明白如何构建“层次结构”表单。
我有这个样本表格
...
public function buildForm(array $form, FormStateInterface $form_state) {
$form['description'] = array(
'#type' => 'fieldset',
'#title' => t('Main description'),
);
$form['description']['subfirst'] = array(
'#type' => 'textfield',
'#title' => t('subfirst'),
);
$form['description']['subsecond'] = array(
'#type' => 'textfield',
'#title' => t('subsecond'),
);
$form['content'] = array(
'#type' => 'fieldset',
'#title' => t('Main description'),
);
$form['content']['subfirst'] = array(
'#type' => 'textfield',
'#title' => t('subfirst'),
);
$form['content']['subsecond'] = array(
'#type' => 'textfield',
'#title' => t('subsecond'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
dpm($form_state->getValues(),"getValues");
}
...
当我提交表单时,我的 form_state->getValues() 返回:
form_state->getValues()
仅包含 ['content']['subfirst']
和 ['content']['subsecond' ]
值...
这意味着我必须将 uniques 标签与表单 api 一起使用?我觉得很奇怪...
然后,我改变我的形式:
$form['content']['subfirst'] become $form['content']['totosubfirst']
$form['content']['subsecond'] become $form['content']['todosubsecond']
新代码:
public function buildForm(array $form, FormStateInterface $form_state) {
$form['description'] = array(
'#type' => 'fieldset',
'#title' => t('Main description'),
);
$form['description']['subfirst'] = array(
'#type' => 'textfield',
'#title' => t('subfirst'),
);
$form['description']['subsecond'] = array(
'#type' => 'textfield',
'#title' => t('subsecond'),
);
$form['content'] = array(
'#type' => 'fieldset',
'#title' => t('Main description'),
);
$form['content']['totosubfirst'] = array(
'#type' => 'textfield',
'#title' => t('subfirst'),
);
$form['content']['totosubsecond'] = array(
'#type' => 'textfield',
'#title' => t('subsecond'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
当我提交表单时,我的 form_state->getValues() 返回:
我得到了四个值。但是,它们处于同一层级。我如何使用表单 api 来获得这样的 form_state :
'description' => 'subfirst' => string(3) "AAA"
'description' => 'subsecond' => string(3) "BBB"
'content' => 'totosubfirst' => string(3) "CCC"
'content' => 'totosubsecond' => string(3) "DDD"
?
我想要得到一个分层的 form_state 因为我想创建一个自定义函数,例如:
foreach element in description
do that
foreach element in content
do that
...
最佳答案
在父元素上设置#tree => TRUE,则值将相应地嵌套
关于drupal-forms - Drupal 8、如何构建分层表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847616/