Am realizat un widget care „generează” câmpuri pe baza opțiunii alese pentru un câmp selectat.
Am terminat cea mai mare parte a logicii:
1- Se alege o opțiune din acest câmp:
$element['valoare'] = [
'#type' => 'selectați',
'#options' => $this->getBreakpointsGroups(),
'#default_value' => $valoare,
'#ajax' => [
'callback' => [$this,'updateBreakpoint'], // nu uitați :: când apelați o metodă de clasă.
'eveniment' => 'schimbare',
'wrapper' => $wrapper_id, // Acest element este actualizat cu acest apel invers AJAX.
'method' => 'html',
]
];
2-Apoi se execută funcția updateBreakpoint și se procedează la actualizarea formularului. Mai întâi extrag valoarea wrapper-ului în cazul în care există mai multe forme de widget, astfel încât să nu țintească o altă instanță a aceluiași formular.
$state = $form_state->getTriggeringElement();
$wrapper_id = $state['#ajax']['wrapper'];
3- După ce am făcut unele modificări în formular, returnez modificările și folosesc o comandă AJAX
$ajax_response = AjaxResponse nou();
$ajax_response->addCommand(new HtmlCommand("div#{$wrapper_id}", $form['image_fieldset']));
returnează $ajax_response;
Wrapper-ul este definit în interiorul funcției formElement în următorul mod:
$wrapper_id = Html::getUniqueId('wrapper');
Problema este că nu se face nicio modificare. Când definesc $wrapper_id ca un șir fără funcții unice de id (de exemplu, „wrapper”), modificările sunt făcute.Sunt confuz de ce. Am avut grijă să verific valoarea wrapper-ului a persistat în toată forma.