Se așteaptă ca un formular ca următorul să afișeze câmpuri suplimentare atunci când utilizatorul a selectat „Da” în butonul radio „Afișați mai multe”. Când este afișată, secțiunea mai are un câmp de text „Nume” și un set de radiouri „Sex”.
Dar nu funcționează niciodată așa cum era de așteptat. Eticheta „Gender” va fi acolo, dar butoanele radio nu sunt niciodată redate. Știu că schimbarea „Genului” în radiouri ar funcționa, dar din anumite motive, trebuie să folosesc mai multe butoane radio. Există vreo modalitate de a face asta să funcționeze?
<?php
spațiu de nume Drupal\mymodule\Form;
utilizați Drupal\Core\Form\FormBase;
clasa DonationPrepareForm extinde FormBase {
/**
* {@inheritdoc}
*/
funcția publică getFormId() {
returnează „formul_meu”;
}
/**
* {@inheritdoc}
*/
funcția publică buildForm(
matrice $form,
FormStateInterface $form_state
) {
$form['show_more'] = [
'#type' => 'radiouri',
'#title' => 'Afișați mai multe',
'#options' => [
'Y' => 'Da',
'N' => 'Nu',
],
'#ajax' => [
'callback' => '::ajaxBuildForm',
'wrapper' => 'edit-mai-wrapper',
'progres' => [
'type' => 'throbber',
'message' => $this->t('Se încarcă...'),
],
],
];
$form['mai mult'] = [
'#type' => 'container',
'#prefix' => '<div id="edit-more-wrapper">',
'#sufix' => '</div>',
];
returnează $form;
}
funcția publică ajaxBuildForm(matrice &$form, FormStateInterface $form_state)
{
if ($form_state->getValue('show_more') === 'Y') {
$form['mai mult']['nume'] = [
'#type' => 'câmp text',
'#title' => 'Nume',
'#required' => TRUE,
];
$form['mai mult']['sex'] = [
'#type' => 'radiouri',
'#title' => 'Sex',
'#options' => [
'M' => 'Bărbat',
„F” => „Femeie”,
],
'#required' => TRUE,
];
}
returnează $form['mai mult'];
}
}
Aceeași întrebare se extinde la alte elemente de formă compozită (de ex.casete de selectare). Există vreo modalitate de a face AJAX să funcționeze pentru ei?