Điểm:0

cập nhật các giá trị $webform_submission trong hàm alterForm của trình xử lý biểu mẫu web tùy chỉnh

lá cờ in

Tôi đang gặp phải một tình huống mà tôi hy vọng ai đó sẽ có thể đưa ra một số lời khuyên và hướng dẫn vì cách tiếp cận của tôi hiện không hiệu quả.

Chúng tôi đang xây dựng biểu mẫu web chứa trường địa chỉ email. Khi người dùng điền vào trường này, chúng tôi sẽ lấy địa chỉ email của họ và thực hiện tra cứu tài khoản trong chức năng validateForm của trình xử lý biểu mẫu web tùy chỉnh của chúng tôi.Việc gửi biểu mẫu không được lưu trong cơ sở dữ liệu của chúng tôi.

Nếu người dùng có tài khoản được liên kết với địa chỉ email được cung cấp, chúng tôi sẽ lấy kết quả và cập nhật số trường trong $webform_submission như sau:

chức năng công khai validateForm(mảng &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {

  // Lấy địa chỉ email
  $email_address = !empty($form_state->getValue('user_email')) ? Html::escape($form_state->getValue('user_email')) : NULL;

  nếu (isset($email_address)) {

    // Lấy bản ghi liên hệ được liên kết với email
    $contact_record_obj = Tiện ích::getContactObjFromEmailAddress($email_address);

    if(isset($contact_record_obj)) {

      // Cập nhật dữ liệu $webform_submission
      $webform_submission->setElementData("first_name", $contact_record_obj->firstName);
      $webform_submission->setElementData("last_name", $contact_record_obj->lastName);
      $webform_submission->setElementData("business_phone", $contact_record_obj->businessPhone);

      // Lưu dữ liệu $webform_submission?
      $webform_submission->save();

    }
  }
}

Tôi đã đặt các điểm ngắt trên mỗi dòng nơi setElementData đang được gọi và tôi có thể thấy rằng mảng dữ liệu trong $webform_submission đang được cập nhật với thông tin được truy lục để tra cứu email.

Sau đó, tôi đã đặt các điểm dừng vào hàm submitForm để kiểm tra xem $webform_submission có được chuyển đến hàm đó hay không và tôi nhận thấy rằng tất cả dữ liệu được đặt trong hàm validateForm đã bị xóa.

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

  // Lấy dữ liệu $webform_submission.
  $form_submission_data = $webform_submission->getData();

}

Số lượng các câu hỏi

  1. Tại sao các giá trị trong $webform_submission được đặt lại giữa các lệnh gọi hàm validateForm và submitForm?

  2. ValidForm có phải là nơi chính xác để cập nhật các giá trị của trường biểu mẫu không?

  3. alterForm có vẻ như là một nơi hợp lý hơn để cập nhật/thay đổi giá trị trường biểu mẫu nhưng tôi không chắc làm cách nào để chặn lệnh gọi alterForm được thực hiện bất cứ khi nào tôi chỉnh sửa biểu mẫu web khi đăng nhập vào Drupal.

Bất kỳ trợ giúp hoặc đề xuất sẽ được đánh giá cao.

lá cờ cn
Chào mừng bạn đến với câu trả lời Drupal. Vui lòng cố gắng chỉ hỏi một câu hỏi cho mỗi bài đăng ở đây. Lý do là nếu ai đó trả lời câu hỏi của bạn, bạn có thể "chấp nhận" câu trả lời đó, nhưng nếu người A trả lời câu hỏi 1 và người B trả lời câu hỏi 2, thì không còn rõ ràng điều gì nên được chấp nhận.

Đă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.