Puncte:0

Cum se recuperează valorile #tree în interiorul unui formular?

drapel cn

Sunt nou la Drupal 8 și creez un modul care are o formă #tree.Am ales formularul #tree pentru a crea mai multe formulare care au aceleași câmpuri de text și buton.

Am dat peste un document în drupal despre #tree.
https://www.drupal.org/docs/7/api/form-api/tree-and-parents
Am făcut o cercetare despre asta și nu găsesc nicio documentație, postare sau blog despre cum să obțin o anumită valoare din #tree.

Am implementat #arborele în forma mea. Singura problemă este că nu pot prelua o anumită valoare din formular.

pentru($contor = 0; $contor < $rowCount; $contor++){
   $form['firstname']['#tree'] = TRUE;
   $form['firstname'] => [
        '#type' => 'câmp text',
        '#title' => 'Prenumele',
   ];
   $form['secondname'] => [
        '#type' => 'câmp text',
        '#title' => 'Al doilea nume',
   ];
   $form['save'] => [
        '#type' => 'trimite',
        '#value' => $this->t('Salvare'),
        '#submit' => ['::submitForm'],
   ];
}

RowCount se referă la rândul din baza mea de date. Procesul este de a obține prenume și prenume de la utilizator, iar acele variabile vor fi salvate în baza de date.

Cum pot obține al 2-lea prenume în formularul #tree?

Puncte:0
drapel cn

#copac denotă o ierarhie în formă, mai aveți nevoie de PHP valid și logic pentru ca acesta să funcționeze, de ex.

// În construcție...
$form['părinte'] = [
  '#type' => 'container',
  „#tree” => ADEVĂRAT,
];

pentru($contor = 0; $contor < $rowCount; $contor++){
  $form['părinte'][$counter] = [
    'firstname' => ['#type' => 'input', ...],
    'lastname' => ['#type' => 'intrare', ...],
  ];
}

// În trimiterea...
// „0” este cheia pe care ați setat-o ​​anterior cu $counter.
$first_firstname = $form_state->getValue('părinte')[0]['prenume'];
$first_lastname = $form_state->getValue('parent')[0]['lastname'];
Jeirod avatar
drapel cn
Iti multumesc pentru clarificare. Prima dată când am citit articolul din Drupal, m-am gândit că `#tree` este un tip de formă în Drupal. Pot schimba și 0 în funcție de ce buton a făcut clic utilizatorul? Să presupunem că utilizatorul a făcut clic pe al doilea buton de trimitere. Este posibil să plasați un câmp ascuns care să dețină numărul de contor care trebuie transmis la funcția `submit`?
drapel cn
Trebuie să setați un `#name` unic pentru fiecare buton și să verificați `$form_state-> getTriggeringElement()` în handlerul de trimitere
Jeirod avatar
drapel cn
multumesc pentru raspuns. Am si o alta intrebare. Am creat altul 2 containere în interiorul containerului părinte. Adaug containere pentru divizii. Pot accesa valoarea ca `$first_firstname = $form_state->getValue('parent')[0]['secondContainer']['thirdContainer']['firstname'];`? Am încercat asta în codul meu și scrie index nedefinit: prenume.
Puncte:0
drapel de

#copac Creează o ierarhie de valori în handlerul de trimitere al unui formular.

Comparaţie:

funcția publică buildForm(array $form, FormStateInterface $form_state) {
  $form['container'] = [
    '#type' => 'container',
  ];
  $form['container']['some_value'] = [
    „#type” => „câmp text”,
  ];

  // Butoanele de trimitere etc. nu sunt afișate

  returnează $form;
}

Acest lucru va crea un element de formular. După ce faceți clic pe trimite, cheia elementului de formular este folosită pentru a returna valoarea. în acest caz, cheia este ceva_valoare, ceea ce înseamnă că gestionanții de validare și trimitere pot prelua valoarea trimisă cu form_state->getValue('some_value').

Acum, adaugă #copac la container:

funcția publică buildForm(array $form, FormStateInterface $form_state) {
  $form['container'] = [
    '#type' => 'container',
    „#tree” => ADEVĂRAT,
  ];
  $form['container']['some_value'] = [
    „#type” => „câmp text”,
  ];

  // Butoanele de trimitere etc. nu sunt afișate

  returnează $form;
}

Cu această schimbare, $form_state->getValue('some_value') nu va returna nimic, deoarece valoarea este acum parte a elementului container (the #copac element) și trebuie să fie preluat în raport cu acesta:

// Returnează o matrice cu o singură cheie, „some_value”, care conține
// valoarea trimisă.
$form_state->getValue('container')

// Returnează valoarea trimisă:
$form_state->getValue(['container', 'some_value'])
Jeirod avatar
drapel cn
Vă mulțumim pentru informațiile suplimentare. Folosesc o buclă care are mai multe butoane de trimitere.

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.