Puncte:0

După redarea formularului de entitate, cum poate fi modificat?

drapel br

Afișez un formular personalizat de entitate cu următorul cod:

$form = $this->entityFormBuilder->getForm($entity, 'array_delimiter');

Acest lucru este perfect, deoarece arată ce am setat pe afișajul formularului. Cu toate acestea, când încerc să adaug o nouă funcție de trimitere apel invers (de ex. $form['actions']['submit']['#submit'][] = 'custom_callback';) atunci aceasta nu este numită.
Când încerc să ascund unele elemente de formular, le pierd datele. (adică $form['status']['#access'] = FALS;).

Dar când fac toate acestea într-un hook_form_FORM_ID_alter funcționează conform așteptărilor. Callback-ul este apelat în timp ce valorile elementelor de formular ascunse nu se pierd.

Există vreo modalitate de a face asta fără un plus hook_form_FORM_ID_alter?

Kevin avatar
drapel in
Nu îl puteți adăuga acolo, deoarece funcțiile de constructor nu știu despre codul adăugat. Astfel, aveți nevoie de cârligul de modificare.
Jaypan avatar
drapel de
Acest lucru ar trebui făcut într-un form_alter hook.
drapel br
Nu, nu am nevoie de form_alter, trebuie doar să extind obiectul de redare a formularului și să setez acolo totul și să dau asta în loc de original când setez obiectul de randare pentru afișarea `array_delimiter`
Kevin avatar
drapel in
Nu ai menționat asta.
Puncte:1
drapel cn

Formularele sunt redate în trei etape:

  1. Structura formei este încorporată FormInterface::buildForm. Rezultatul poate fi modificat într-un hook_form_alter().

  2. The elemente de formă sunt procesate. Pot fi trimise numai elementele de formular care sunt procesate.

  3. Matricea de randare finală a formularului este redată.

În ciuda numelui constructor de forme nu numai că construiește elementele de formular, dar le și prelucrează, astfel încât acestea să fie gata să fie redate. Elementele de formular mai complexe necesită acest pas, deoarece structura finală de randare este construită în apeluri inverse #process. Dar nici măcar elementele de formular simple care se redau bine fără procesare nu pot fi trimise.

drapel br
Aha, deci singura soluție pentru aceasta este extinderea clasei de formular original și în loc să dau obiectul formular original ca obiect de randare, dau forma mea extinsă. Prin urmare, punctele 2 și 3 nu au rulat încă când am schimbat unele dintre valorile formularului.
drapel br
Da, și funcționează, pentru că oricum trebuie să definesc noul obiect de redare al afișajului formularului, îl pot extinde pe cel deja existent pentru a adăuga acolo câmpurile de apel invers și suplimentare, așa că nu există coduri aleatorii peste tot.
4uk4 avatar
drapel cn
Da, acesta este cel mai simplu mod. Setați clasa de formular extinsă ca handler de formular în adnotările de tip de entitate.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.