Avem nevoie să adăugăm „câmpuri repetabile” la un formular pe baza intrării furnizate într-un câmp text. De obicei, folosim un buton „adăugați un alt” pentru a urmări numărul de câmpuri de redat în buildForm()
, și actualizați acel număr într-un apel invers de trimitere pe butonul.
Totuși, funcționalitatea pe care o dorim nu este asta. Avem nevoie ca atunci când cineva introduce text într-un câmp de text (altul decât gol), să adauge un grup suplimentar de câmpuri sub acesta. Le permitem oamenilor să scaneze coduri de bare și de fiecare dată când scanează un cod de bare într-un câmp de text, dorim ca acesta să creeze un alt grup de câmpuri, astfel încât să poată scana un alt articol dacă doresc.
Am încercat să folosim #Trimite
în câmpul text, dar #submit nu pare să se declanșeze în câmpul text, deoarece am adăugat o declarație de tipărire, precum și o $form-state->set()
acolo și încercați să imprimați $form_state->get()
pe formular fără niciun rezultat.
Deoarece nu puteți actualiza form_state în interiorul unui apel invers Ajax, nu putem găsi o modalitate de a realiza ceea ce vrem să facem (Adăugați un alt grup de câmpuri odată ce textul este introdus într-o zonă de text).
Există o altă modalitate prin care putem face asta?
(Permitem adăugarea a doar 10 grupuri per trimitere, așa că, ca „soluție de soluție”, adăugăm dinamic 10 grupuri în buildForm, apoi folosim #state
pentru a le ascunde pe fiecare dacă câmpul de text anterior nu are date, dar acest lucru nu ne permite să adăugăm un buton de „eliminare” pentru fiecare câmp de text, astfel încât utilizatorul să poată elimina câmpurile de text pe care nu dorește să le folosească.)