Score:0

จะดึงค่า #tree ภายในแบบฟอร์มได้อย่างไร

ธง cn

ฉันใหม่ที่ Drupal 8 และฉันกำลังสร้างโมดูลที่มี #tree formฉันเลือก #tree form เพื่อสร้างหลายๆ ฟอร์มที่มีช่องข้อความและปุ่มเหมือนกัน

ฉันเจอเอกสารหนึ่งใน drupal เกี่ยวกับ #tree
https://www.drupal.org/docs/7/api/form-api/tree-and-parents
ฉันได้ค้นคว้าเกี่ยวกับมันแล้วและไม่พบเอกสาร โพสต์หรือบล็อกใดๆ เกี่ยวกับวิธีรับค่าเฉพาะจาก #tree

ฉันได้ดำเนินการ #tree ในรูปแบบของฉัน ปัญหาเดียวคือฉันไม่สามารถดึงค่าเฉพาะจากแบบฟอร์มได้

สำหรับ ($counter = 0; $counter < $rowCount; $counter++){
   $form['firstname']['#tree'] = TRUE;
   $form['ชื่อ'] => [
        '#type' => 'ช่องข้อความ',
        '#title' => 'ชื่อ',
   ];
   $form['ชื่อที่สอง'] => [
        '#type' => 'ช่องข้อความ',
        '#title' => 'ชื่อรอง',
   ];
   $แบบฟอร์ม['บันทึก'] => [
        '#type' => 'ส่ง',
        '#value' => $this->t('บันทึก'),
        '#submit' => ['::submitForm'],
   ];
}

rowCount เกี่ยวข้องกับแถวในฐานข้อมูลของฉัน กระบวนการคือการรับชื่อและนามสกุลจากผู้ใช้และตัวแปรเหล่านั้นจะถูกบันทึกไว้ในฐานข้อมูล

ฉันจะได้รับชื่อที่ 2 ในแบบฟอร์ม #tree ได้อย่างไร

Score:0
ธง cn

#ต้นไม้ แสดงถึงลำดับชั้นในแบบฟอร์ม คุณยังต้องการ PHP ที่ถูกต้องและมีเหตุผลเพื่อให้มันทำงานได้ เช่น

//ในบิลด์...
$แบบฟอร์ม['ผู้ปกครอง'] = [
  '#type' => 'คอนเทนเนอร์',
  '#tree' => จริง,
];

สำหรับ ($counter = 0; $counter < $rowCount; $counter++){
  $form['parent'][$counter] = [
    'ชื่อแรก' => ['#type' => 'อินพุต', ...],
    'นามสกุล' => ['#type' => 'อินพุต', ...],
  ];
}

//ในการส่ง...
// '0' คือคีย์ที่คุณตั้งค่าไว้กับ $counter ก่อนหน้านี้
$first_firstname = $form_state->getValue('parent')[0]['firstname'];
$first_lastname = $form_state->getValue('parent')[0]['lastname'];
Jeirod avatar
cn flag
ขอบคุณสำหรับคำชี้แจง ครั้งแรกที่ฉันอ่านบทความใน Drupal ฉันคิดว่า `#tree` เป็นรูปแบบชนิดหนึ่งใน Drupal ฉันสามารถเปลี่ยน 0 ตามปุ่มที่ผู้ใช้คลิกได้หรือไม่ สมมติว่าผู้ใช้คลิกปุ่มส่งครั้งที่ 2 เป็นไปได้ไหมที่จะวางฟิลด์ที่ซ่อนอยู่ซึ่งเก็บจำนวนตัวนับที่จะส่งผ่านที่ฟังก์ชัน 'submit'
cn flag
คุณต้องตั้งค่า `#name` ที่ไม่ซ้ำกันสำหรับแต่ละปุ่ม และกาเครื่องหมาย `$form_state-> getTriggeringElement()` ในตัวจัดการการส่ง
Jeirod avatar
cn flag
ขอบคุณสำหรับการตอบกลับ. ฉันยังมีคำถามอื่น ฉันได้สร้างอีก 2 คอนเทนเนอร์ภายในคอนเทนเนอร์หลัก ฉันเพิ่มคอนเทนเนอร์สำหรับหน่วยงานต่างๆ ฉันสามารถเข้าถึงค่าเช่น `$first_firstname = $form_state->getValue('parent')[0]['secondContainer']['thirdContainer']['firstname'];` ได้หรือไม่ ฉันได้ลองสิ่งนี้ในรหัสของฉันแล้ว มันบอกว่า undefined index: firstname
Score:0
ธง de

#ต้นไม้ สร้างลำดับชั้นของค่าในตัวจัดการการส่งของฟอร์ม

เปรียบเทียบ:

ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
  $form['คอนเทนเนอร์'] = [
    '#type' => 'คอนเทนเนอร์',
  ];
  $form['คอนเทนเนอร์']['some_value'] = [
    '#type' = >'textfield',
  ];

  // ปุ่มส่ง ฯลฯ ไม่แสดง

  คืนฟอร์ม $;
}

สิ่งนี้จะสร้างองค์ประกอบฟอร์ม หลังจากคลิกส่ง คีย์ขององค์ประกอบฟอร์มจะใช้เพื่อส่งคืนค่า ในกรณีนี้ที่สำคัญคือ some_valueความหมายตัวจัดการการตรวจสอบและการส่งสามารถดึงค่าที่ส่งด้วย form_state->getValue('some_value').

ตอนนี้เพิ่ม #ต้นไม้ ไปที่คอนเทนเนอร์:

ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
  $form['คอนเทนเนอร์'] = [
    '#type' => 'คอนเทนเนอร์',
    '#tree' => จริง,
  ];
  $form['คอนเทนเนอร์']['some_value'] = [
    '#type' = >'textfield',
  ];

  // ปุ่มส่ง ฯลฯ ไม่แสดง

  คืนฟอร์ม $;
}

ด้วยการเปลี่ยนแปลงนี้ $form_state->getValue('some_value') จะไม่ส่งคืนสิ่งใด เนื่องจากตอนนี้ค่าเป็นส่วนหนึ่งขององค์ประกอบคอนเทนเนอร์ (ไฟล์ #ต้นไม้ องค์ประกอบ) และจำเป็นต้องดึงข้อมูลที่สัมพันธ์กัน:

// ส่งคืนอาร์เรย์ที่มีคีย์เดียว 'some_value' ซึ่งมี
// ส่งค่า
$form_state->getValue('คอนเทนเนอร์')

// ส่งกลับค่าที่ส่ง:
$form_state->getValue(['คอนเทนเนอร์', 'some_value'])
Jeirod avatar
cn flag
ขอบคุณสำหรับข้อมูลเพิ่มเติม ฉันใช้ลูปที่มีปุ่มส่งหลายปุ่ม

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา