นี่คือแบบฟอร์มที่ใช้ DI สำหรับ $this->entity_type_manager
นอกจากนี้ยังมีปุ่มตัวเลือกพร้อม Ajax (ฉันได้เพิ่มรหัสเนื่องจากอาจเป็นสาเหตุของปัญหาของฉัน)
คลาส myForm ขยาย FormBase {
ส่วนตัว ?EntityTypeManagerInterface $entity_type_manager=NULL;
ฟังก์ชั่นสาธารณะ __construct (Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager) {
$this->entity_type_manager=$entity_type_manager;
}
สร้างฟังก์ชันคงที่สาธารณะ (ContainerInterface $container) {
ส่งคืนค่าคงที่ใหม่ (
$container->get('entity_type.manager'),
);
}
ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
// เก็บค่าใน $form_state เพื่อใช้ในการส่ง
$form_state->set('entity_type_manager', $this->entity_type_manager);
...
// บางทีส่วนประกอบ Ajax อาจเป็นปัญหา
$form['คอนเทนเนอร์'] = [
'#type' => 'คอนเทนเนอร์',
'#prefix' => '<div id="ajax-wrapper">',
'#suffix' => '</div>',
'my_radio' => [
'#type' => 'วิทยุ',
'#options' => ["option1","option2"],
'#required' => จริง,
'#default_value' => $type_of_bo,
'#อาแจ็กซ์' => [
'callback' => [$this, 'ajaxGetInvestmentHandler'],
'wrapper' => 'ajax-wrapper',
'เหตุการณ์' => 'คลิกอินพุต',
]
]
...
];
}
ฟังก์ชันสาธารณะคงที่ ajaxGetInvestmentHandler (อาร์เรย์ $form, FormStateInterface $form_state) {
ส่งคืน $form['container'];
}
ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
// $this->entity_type_manager เป็นโมฆะ
// $form_state->get('entity_type_manager') ยังเป็นโมฆะ
...
}
...
}
อย่างที่คุณเห็นใน ส่ง
, $this->entity_type_manager
เป็น NULL และ $form_state->get('entity_type_manager')
ยังเป็น NULL
เกิดอะไรขึ้น?