ฉันขยายประเภทรายการสั่งซื้อด้วยฟิลด์บูลีนเพิ่มเติม
ก่อนรายการสั่งซื้อจะถูกส่งผ่าน "แบบฟอร์มแก้ไขรายการสั่งซื้อ" (/admin/commerce/orders/{order_id}/edit) ควรตรวจสอบความถูกต้องและฟิลด์บูลีนควรกลายเป็น "จริง" หรือยังคงเป็น "เท็จ"
"แบบฟอร์มแก้ไขคำสั่งซื้อ" ประกอบด้วยแบบฟอร์มเอนทิตีแบบอินไลน์ (IEF) หลายรายการ หนึ่งใน IEF จัดการรายการสั่งซื้อของคำสั่งซื้อ ฉันเพิ่มฟังก์ชันการตรวจสอบที่กำหนดเองด้วยโมดูลที่กำหนดเองของฉันก่อน:
ฟังก์ชัน MYMODULE_inline_entity_form_entity_form_alter(อาร์เรย์ &$entity_form, FormStateInterface &$form_state)
{
...
array_unshift($entity_form['#element_validate'],'MYMODULE_inline_entity_form_validate_hide_gross_price');
...
}
เรียกใช้ฟังก์ชันการตรวจสอบที่กำหนดเองได้สำเร็จ และตรรกะทางธุรกิจ/กระบวนการทั่วไปของฟังก์ชันการตรวจสอบความถูกต้องที่กำหนดเองก็ทำงานได้ดีเช่นกัน
ปัญหาคือ ฉันยังไม่พบวิธีตั้งค่าฟิลด์บูลีนภายในประเภทรายการสั่งซื้อของฉันเลย ทั้งนี้ขึ้นอยู่กับการตรวจสอบความถูกต้องของ IEF
ฉันลองกับ $form_state->setValueForElement()
ฟังก์ชัน API (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormStateInterface.php/function/FormStateInterface%3A%3AsetValueForElement/9.3.x):
ฟังก์ชัน MYMODULE_inline_entity_form_validate_hide_gross_price (อาร์เรย์ &$entity_form, FormStateInterface $form_state) {
...
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"],["#value"=> จริง]);
...
}
ฉันได้รับข้อความแสดงข้อผิดพลาด
ค่านี้ควรเป็นประเภทดั้งเดิมที่ถูกต้อง Drupal\Core\TypedData\Plugin\DataType\BooleanData: ค่า
ถ้าฉันแก้ไขรหัสดังต่อไปนี้:
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"]["#value"], จริง);
ฉันได้รับข้อผิดพลาด PHP ในบันทึกการเฝ้าระวัง:
TypeError: อาร์กิวเมนต์ 1 ส่งผ่านไปยัง
Drupal\Core\Form\FormState::setValueForElement() ต้องเป็นประเภท
อาร์เรย์, int ที่กำหนด
ดังนั้นไวยากรณ์ที่ถูกต้องในการตั้งค่าฟิลด์บูลีนภายในประเภทรายการสั่งซื้อด้วยแบบฟอร์ม IEF คืออะไร