Рейтинг:0

Как создать похожие множественные формы с помощью кнопки?

флаг cn

Я использую Drupal 9. Я создаю модуль, который имеет форму с кнопкой, которая будет воссоздавать другую форму, аналогичную первой.

Это мой код.

общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state) {
  $database = \Drupal::database();
  $result = $database->select('user_details', 'u')
    ->fields('u', ['uid']);
  $row = $result->execute()->fetchAll();
  $rowCount = количество ($ row);

  $form['buttons_multiple'] = [
    '#type' => "контейнер",
    '#attributes' => ['style' => 'margin-top: 2em;'],
    'добавить_чат' => [
      '#type' => 'отправить',
      '#value' => $this->t('Добавить форму +'),
      '#атрибуты' => [
        'стиль' => 'размер шрифта: 1.2em;',
      ],
      '#submit' => ['::addForm'],
    ],
  ];

  for ($counter = 1; $counter <= $rowCount; $counter++) {
    $ форма ['form_box_' . $счетчик] = [
      '#type' => "контейнер",
      'полное_имя'.$counter => [
        '#тип' => 'текстовое поле',
        '#название' => 'имя',
        '#размер' => 12,
        '#required' => ИСТИНА,
      ],
      'buttons_single' => [
        '#type' => "контейнер",
        'сохранить'.$counter => [
          '#type' => 'отправить',
          '#value' => $this->t('Сохранить'),
          '#атрибуты' => [
            'стиль' => 'размер шрифта: 1em;',
          ],
          '#submit' => ['::submitForm'],
        ],
      ],
      'счетчик' => [
        '#type' => 'скрытый',
        '#значение' => $счетчик,
      ],
    ];
  }
}

публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state) {

  $name = $form_state->getValue('full_name');
  $counter = $form_state->getValue('count');
        
  $form_state->set('user_values', [
    'имя' => $form_state->getValue('имя'),
  ]);

  // Для целей тестирования. Показать полное имя
  $this->messenger()->addMessage($this->t('Привет, вас зовут %name.', ['%name' => $name]));
}

общедоступная функция addForm (массив и $ форма, FormStateInterface $ form_state) {
  $значения = [
    [
      'полное_имя' => '',
    ],
  ];
    
  $database = \Drupal::database();
  $query = $database->insert('user_details')->fields(['full_name']);
  foreach ($values ​​как $details) {
    $запрос->значения($детали);
  }
  $запрос->выполнить();
}

Основываясь на приведенном выше коде, я получаю только имя последней добавленной формы, даже если я нажал сохраненную кнопку первой формы.

Как я буду работать с сохраненной кнопкой для каждой формы?

Заранее спасибо.

Jaypan avatar
флаг de
В Drupal 7 это было сделано с помощью hook_forms(), но в Drupal 8 это было удалено. Вы можете использовать метод замены: https://www.drupal.org/node/2188851
Jeirod avatar
флаг cn
@Jaypan, спасибо за эту статью. Это мне очень помогает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.