Puncte:0

Cum se creează mai multe forme similare folosind un buton?

drapel cn

Folosesc Drupal 9. Creez un modul care are un formular cu un buton care va re-crea un alt formular similar cu primul.

Acesta este codul meu.

funcția publică buildForm(array $form, FormStateInterface $form_state) {
  $baza de date = \Drupal::baza de date();
  $rezultat = $baza de date->select('detalii_utilizator', 'u')
    ->fields('u', ['uid']);
  $row = $rezultat->execute()->fetchAll();
  $rowCount = count($row);

  $form['buttons_multiple'] = [
    '#type' => "container",
    '#attributes' => ['style' => 'margin-top: 2em;'],
    'add_chat' => [
      '#type' => 'trimite',
      '#value' => $this->t('Adăugați formular +'),
      '#attributes' => [
        'style' => 'dimensiunea fontului: 1.2em;',
      ],
      '#submit' => ['::addForm'],
    ],
  ];

  pentru ($counter = 1; $counter <= $rowCount; $counter++) {
    $form['form_box_' . $counter] = [
      '#type' => "container",
      'nume_complet'.$counter => [
        '#type' => 'câmp text',
        '#title' => 'nume',
        '#size' => 12,
        '#required' => TRUE,
      ],
      'buttons_single' => [
        '#type' => "container",
        'salvare'.$counter => [
          '#type' => 'trimite',
          '#value' => $this->t('Salvare'),
          '#attributes' => [
            'style' => 'dimensiunea fontului: 1em;',
          ],
          '#submit' => ['::submitForm'],
        ],
      ],
      'count' => [
        '#type' => 'ascuns',
        '#value' => $counter,
      ],
    ];
  }
}

funcția publică submitForm(matrice &$form, FormStateInterface $form_state) {

  $nume = $form_state->getValue('nume_complet');
  $contor = $form_state->getValue('count');
        
  $form_state->set('valori_utilizator', [
    'nume' => $form_state->getValue('nume'),
  ]);

  // În scop de testare. Afișează numele complet
  $this->messenger()->addMessage($this->t('Bună, numele tău este %name.', ['%name' => $name]));
}

funcția publică addForm(matrice &$form, FormStateInterface $form_state) {
  $valori = [
    [
      'full_name' => ''',
    ],
  ];
    
  $baza de date = \Drupal::baza de date();
  $interogare = $database->insert('user_details')->fields(['full_name']);
  foreach ($valori ca $detalii) {
    $interogare->valori($detalii);
  }
  $interogare->execute();
}

Pe baza codului de mai sus, primesc doar numele ultimului formular adăugat chiar dacă am făcut clic pe butonul salvat al primului formular.

Cum voi lucra la butonul salvat pentru fiecare formular?

Multumesc anticipat.

Jaypan avatar
drapel de
În Drupal 7, acest lucru a fost făcut cu hook_forms(), dar a fost eliminat în Drupal 8. Puteți utiliza metoda de înlocuire: https://www.drupal.org/node/2188851
Jeirod avatar
drapel cn
@Jaypan, mulțumesc pentru acest articol. Mă ajută foarte mult.

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.