Đây là một hình thức sử dụng DI cho $this->entity_type_manager
Ngoài ra còn có một nút radio với Ajax (Tôi đã thêm mã vì đó có thể là lý do gây ra sự cố của tôi)
lớp myForm mở rộng FormBase {
riêng tư ?EntityTypeManagerInterface $entity_type_manager=NULL;
chức năng công cộng __construct(Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager) {
$this->entity_type_manager=$entity_type_manager;
}
tạo hàm tĩnh công khai (ContainerInterface $container) {
trả về tĩnh mới (
$container->get('entity_type.manager'),
);
}
chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {
// giữ nguyên giá trị trong $form_state để sử dụng khi gửi
$form_state->set('entity_type_manager', $this->entity_type_manager);
...
// Có thể thành phần Ajax có vấn đề
$form['container'] = [
'#type' => 'thùng chứa',
'#prefix' => '<div id="ajax-wrapper">',
'#suffix' => '</div>',
'my_radio' => [
'#type' => 'radio',
'#options' => ["option1","option2"],
'#required' => ĐÚNG,
'#default_value' => $type_of_bo,
'#ajax' => [
'gọi lại' => [$this, 'ajaxGetInvestmentHandler'],
'trình bao bọc' => 'trình bao bọc ajax',
'sự kiện' => 'nhấp vào đầu vào',
],
],
...
];
}
hàm công khai tĩnh ajaxGetInvestmentHandler(mảng $form, FormStateInterface $form_state) {
trả về $form['container'];
}
hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) {
// $this->entity_type_manager là NULL
// $form_state->get('entity_type_manager') cũng là NULL
...
}
...
}
Như bạn có thể thấy trong Gửi đi
, $this->entity_type_manager
là NULL và $form_state->get('entity_type_manager')
cũng là NULL.
Chuyện gì thế?