Điểm:0

Kết xuất các trường đã gửi của biểu mẫu thành email với tiêu đề + giá trị

lá cờ in

Tôi có một hình thức khá phức tạp dựa trên \Drupal\Core\Form\FormBase với nhiều trường (được lồng vào nhau một phần) và muốn gửi toàn bộ nội dung trong email khi gửi.

Hiện tại tôi có

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

   foreach ($form_state->getValues() as $key => $value) {
     if (!empty($form[$key]['#title']) && $key != 'images') {
       $values[$form[$key]['#title']->render()] = $value;
     }
   }
...
# sau này tôi sẽ định dạng mảng $values ​​dưới dạng danh sách HTML

Điều này sẽ chỉ hiển thị các trường ở cấp cao nhất của biểu mẫu, nhưng tôi có các trường trong nhóm.

Có cách nào hay và rõ ràng để hiển thị tất cả các giá trị của trường không? Hay tôi phải lặp lại và phân tích thủ công qua biểu mẫu $ mảng?

Tôi thậm chí có thể sử dụng trình kết xuất đồ họa cho việc này không?

CHỈNH SỬA:

chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {


    //...

    $form['công ty'] = [
        '#type' => 'thùng chứa',
    ];

    $form['company']['nameofcompany'] = [
        '#type' => 'trường văn bản',
        '#title' => $this->t('Tên Công ty'),
    ];

Tóm lại:

Làm cách nào tôi có thể lặp lại tất cả các trường, bao gồm cả những trường nằm trong vùng chứa và nhận các giá trị + nhãn (không chỉ tên kỹ thuật)? Có một số người trợ giúp tốt cho việc này hay tôi phải làm tất cả theo cách thủ công?

apaderno avatar
lá cờ us
Mã đó sẽ không hoạt động và nó không có ý nghĩa gì. Tại sao bạn cần `$form[$key]['#title']` để truy cập một giá trị trong `$form_state`? Hơn nữa, vì `$form[$key]['#title']` là một chuỗi nên nó không triển khai bất kỳ phương thức `render()` nào.
apaderno avatar
lá cờ us
Nó cũng sẽ hữu ích để xem mã xây dựng biểu mẫu. Không rõ ý của bạn khi nói *nhóm* và nếu *trường* có nghĩa là *phần tử biểu mẫu*.
lá cờ in
mã hiện đang hoạt động, #title là một đối tượng, tôi tin rằng đó là do biểu mẫu đã được tạo. Vấn đề duy nhất của tôi là lặp lại tất cả các phần tử biểu mẫu, vì chúng được lồng trong các nhóm. Tôi thêm một số mã ví dụ về cách tạo mảng $form ban đầu.
apaderno avatar
lá cờ us
Nếu không nhìn thấy tất cả các thành phần của biểu mẫu, thì không thể hiểu ý của bạn về *nhóm*. Đối với mã được hiển thị, chỉ cần sử dụng `'nameofcompany'` là đủ, không phải những gì được trả về bởi `$this->t('Name of Company')`. Bạn đã có `$values['nameofcompany']`; bạn không cần đặt `$values[$this->t('Name of Company')]` thành cùng một giá trị.
lá cờ in
Tôi cần nhãn, không phải tên nội bộ
lá cờ in
Tôi đã chỉnh sửa câu hỏi - với các nhóm ý tôi là vùng chứa. Xem mã mẫu. Điều này làm cho nó rõ ràng hơn? Hãy cho tôi biết nếu bạn có thắc mắc.
lá cờ in
@apaderno Tôi đã đăng một câu trả lời ... nhưng tôi tự hỏi liệu có cách nào đẹp hơn - không quá thấp - không.
Điểm:0
lá cờ in

Đây là những gì tôi nghĩ ra, tôi chỉ tự hỏi liệu có cách nào thanh lịch hơn cách phân tích cú pháp "cấp thấp" này không

/**
 * Trả về một mảng có nhãn là khóa, giá trị đã gửi là giá trị, dựa trên biểu mẫu ban đầu
 *
 * @param FormStateInterface $form_state
 * @return mảng
 */
chức năng riêng tạoLabelsWithValues(FormStateInterface $form_state): mảng {
  $form = $form_state->getCompleteForm();
  $result = $this->iterateAndAddValues($form, $form_state);
  trả lại kết quả $;
}

/**
 * Lặp lại biểu mẫu hoặc vùng chứa và cộng các giá trị
 */
hàm riêng iterateAndAddValues(mảng $formOrContainer, FormStateInterface $form_state, mảng $result = []) {
  foreach ($formOrContainer as $key => $element) {
    if ($key[0] === '#' || $key === 'form_build_id' || $key === 'form_id' || $key === 'submit') {
      tiếp tục;
    }
    if ($element['#type'] === 'container' || $element['#type'] === 'fieldset') {
      $result = $this->iterateAndAddValues($element, $form_state, $result);
      tiếp tục;
    }

    if ($value = $form_state->getValue($key)) {
      $result[(string)$element['#title']] = $value;
    }
  }

  trả lại kết quả $;
}

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