Điểm:0

Làm cách nào để tạo nhiều biểu mẫu tương tự bằng một nút?

lá cờ cn

Tôi đang sử dụng Drupal 9. Tôi đang tạo một mô-đun có biểu mẫu có nút sẽ tạo lại một biểu mẫu khác tương tự như biểu mẫu đầu tiên.

Đây là mã của tôi.

chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {
  $database = \Drupal::database();
  $result = $database->select('user_details', 'u')
    ->trường('u', ['uid']);
  $row = $result->execute()->fetchAll();
  $rowCount = đếm($row);

  $form['buttons_multiple'] = [
    '#type' => "thùng chứa",
    '#attributes' => ['style' => 'margin-top: 2em;'],
    'add_chat' => [
      '#type' => 'gửi',
      '#value' => $this->t('Thêm biểu mẫu +'),
      '#thuộc tính' => [
        'phong cách' => 'cỡ chữ: 1.2em;',
      ],
      '#submit' => ['::addForm'],
    ],
  ];

  for ($counter = 1; $count <= $rowCount; $counter++) {
    $form['form_box_' . $bộ đếm] = [
      '#type' => "thùng chứa",
      'full_name'.$count => [
        '#type' => 'trường văn bản',
        '#title' => 'tên',
        '#size' => 12,
        '#required' => ĐÚNG,
      ],
      'buttons_single' => [
        '#type' => "thùng chứa",
        'save'.$counter => [
          '#type' => 'gửi',
          '#value' => $this->t('Save'),
          '#thuộc tính' => [
            'phong cách' => 'cỡ chữ: 1em;',
          ],
          '#submit' => ['::submitForm'],
        ],
      ],
      'đếm' => [
        '#type' => 'ẩn',
        '#value' => $count,
      ],
    ];
  }
}

hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) {

  $name = $form_state->getValue('full_name');
  $count = $form_state->getValue('count');
        
  $form_state->set('user_values', [
    'tên' => $form_state->getValue('tên'),
  ]);

  // Dành cho mục đích thử nghiệm. Hiển thị tên đầy đủ
  $this->messenger()->addMessage($this->t('Xin chào, tên bạn là %name.', ['%name' => $name]));
}

hàm công cộng addForm(mảng &$form, FormStateInterface $form_state) {
  giá trị $ = [
    [
      'full_name' => '',
    ],
  ];
    
  $database = \Drupal::database();
  $query = $database->insert('user_details')->fields(['full_name']);
  foreach ($values ​​as $details) {
    $query->values($details);
  }
  $query->execute();
}

Dựa trên đoạn mã trên, tôi chỉ nhận được tên của biểu mẫu được thêm lần cuối ngay cả khi tôi đã nhấp vào nút đã lưu của biểu mẫu đầu tiên.

Tôi sẽ làm việc trên nút đã lưu cho mỗi biểu mẫu như thế nào?

Cảm ơn bạn trước.

Jaypan avatar
lá cờ de
Trong Drupal 7, điều này đã được thực hiện với hook_forms(), nhưng điều đó đã bị xóa trong Drupal 8. Bạn có thể sử dụng phương pháp thay thế: https://www.drupal.org/node/2188851
Jeirod avatar
lá cờ cn
@Jaypan, cảm ơn bạn về bài viết này. Nó giúp tôi rất nhiều.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.