Score:0

วิธีกำหนดตำแหน่งที่จะแสดง form_state->setError เมื่อใช้การเรียกกลับ ajax หลายรายการ

ธง cn

ฉันกำลังทำงานกับฟังก์ชันที่กำหนดเองภายในมุมมองตารางที่เปิดใช้งานแบบฟอร์ม 'แก้ไขด่วน' เป็นฟิลด์ที่พร้อมใช้งานผ่านปลั๊กอินฟิลด์มุมมอง

ฟอร์มจะแสดงในแต่ละแถวแยกกันโดยใช้ sub_id เฉพาะที่ส่งผ่านไปยังตัวสร้างฟอร์มสำหรับแต่ละแถว

ฉันมีแบบฟอร์มที่ใช้งานได้และมันทำหน้าที่ส่งอย่างถูกต้อง แต่ปัญหาคือฉันต้องทำสองสิ่งบน ajax callback ดังนั้นฉันจึงใช้ระบบ AjaxResponse() เพื่อดำเนินการสองอย่างที่แตกต่างกัน

การดำเนินการแรกคือการอัปเดต 'ค่า' ของคอลัมน์ที่ระบุในแถวมุมมอง ประการที่สองโดยพื้นฐานแล้วเพียงแค่ทำ return $form; เพื่อคืนฟอร์ม

ปัญหาคือ เมื่อแบบฟอร์มทำการตรวจสอบ การตรวจสอบจะทำงาน ยกเว้นว่าข้อความจะไม่แสดงจนกว่าฉันจะรีเฟรชหน้า ฉันไม่รู้ว่าจะบอกได้อย่างไรว่าจะใช้ wrapper ใดในการแสดงข้อความฟอร์ม เนื่องจากฉันส่งสองอันที่แตกต่างกันไปยังการตอบสนองของ ajax เนื่องจากฉันต้องทำการเปลี่ยนแปลงสองครั้ง

รหัสที่ฉันใช้ภายใน ajax callback คือ:

ฟังก์ชันสาธารณะ quickEditAjax (&$form, FormStateInterface $form_state) {
    $values ​​= $form_state->getValues();

    $response = ใหม่ AjaxResponse();

    $status = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($values['status']);
    $response->addCommand(new ReplaceCommand('.request-status-'. $values['id'],$status->getName()));
    $response->addCommand(new ReplaceCommand('#quick-edit-wrapper-'. $this->sub_id,$form));

    ส่งคืน $response;
  }

ที่ไหน #quick-edit-wrapper-$this->sub_id เป็นชุด #id เฉพาะบนแบบฟอร์ม และ .request-status-$values['id'] เป็นคลาสที่แนบมากับคอลัมน์มุมมองตารางที่ฉันพยายามเปลี่ยน

ทั้งฟอร์มและคอลัมน์ตารางมีรหัสและคลาสที่ถูกต้อง และคอลัมน์จะอัปเดตสำเร็จผ่านการเรียกกลับ ajax addCommand()

ข้อความแสดงข้อผิดพลาดในการตรวจสอบไม่ปรากฏใน wrapper อย่างใดอย่างหนึ่ง แต่ฉันต้องการให้ปรากฏใน #quick-แก้ไขห่อ กระดาษห่อ หากไม่มีข้อผิดพลาดในการตรวจสอบและการส่งผ่าน ฉันยังส่งข้อความยืนยันความสำเร็จและข้อความนั้นจะไม่ปรากฏขึ้นจนกว่าฉันจะรีเฟรชหน้านี้

มีวิธีที่ฉันสามารถบอกข้อความได้อย่างเฉพาะเจาะจงหรือไม่ว่าจะใช้ wrapper ใดในการแสดงผล การตอบสนองของ ajax ดูเหมือนจะสับสนว่าควรใช้อันไหน

Score:1
ธง cn

เพิ่มบล็อกข้อความสถานะในแบบฟอร์ม:

ถ้า ($form_state->hasAnyErrors()) {
  $แบบฟอร์ม['status_messages'] = [
    '#type' => 'status_messages',
    '#น้ำหนัก' => -1000,
  ];
  $form['#sorted'] = FALSE;
}
$response->addCommand(new ReplaceCommand('#quick-edit-wrapper-' . $this->sub_id, $form));
Ex0r avatar
cn flag
ทำงานได้อย่างสมบูรณ์แบบ! ขอขอบคุณ.

โพสต์คำตอบ

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