Điểm:0

Tại sao biểu mẫu không giữ giá trị được tạo trong quá trình xây dựng

lá cờ sa

Đâ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ế?

Jaypan avatar
lá cờ de
"Như bạn có thể thấy" - làm thế nào chúng ta có thể thấy điều này? Không có bất kỳ lý do tại sao nó phải là null, bạn xác định nó như thế nào?
Baud avatar
lá cờ sa
Xin lỗi để không đủ rõ ràng. Ý tôi là tôi đã thực hiện một số thử nghiệm trên các giá trị đó và chúng là NULL (như được hiển thị bởi các somments trong lần gửi). Tôi đồng ý rằng điều này không nên là NULL nhưng nó ... có lẽ nó đến từ AJAX?
Jaypan avatar
lá cờ de
Dựa trên mã hiển thị, `$this->entity_type_manager` không thể là NULL. Hàm submitForm không thể được gọi mà không khởi tạo biểu mẫu và biểu mẫu yêu cầu biến được truyền cho nó để tạo biểu mẫu. Đó là lý do tại sao tôi hỏi làm thế nào bạn chẩn đoán nó là NULL.
Baud avatar
lá cờ sa
$this->entity_type_manager cũng là NULL trong hàm xác thực...
No Sssweat avatar
lá cờ ua
Bởi vì bạn đang đặt nó thành null... `$entity_type_manager=NULL;`
Baud avatar
lá cờ sa
Nếu tôi không đặt nó thành NULL làm giá trị mặc định, tôi nhận được `$entity_type_manager không được truy cập trước khi khởi tạo`
Jaypan avatar
lá cờ de
Sau đó, đó là một vấn đề khác nhau.
Điểm:2
lá cờ cn

Như bạn có thể thấy trong phần gửi, $this->entity_type_manager là NULL

Bạn cần khai báo thuộc tính dịch vụ được bảo vệ. Thuộc tính riêng tư không thể được khôi phục. Nhìn thấy https://www.drupal.org/docs/drupal-apis/services-and-dependency-injection/dependency-injection-for-a-form#s-considerations-for-dependency-injection

.. và $form_state->get('entity_type_manager') cũng là NULL

form_state không được lưu trong bộ đệm giữa lần tạo biểu mẫu đầu tiên và yêu cầu gửi. Nhìn thấy buildForm: cách phân biệt giữa tải lại trang và gọi lại ajax?. Và khi bạn chạy bản dựng biểu mẫu trong các yêu cầu Ajax sau này, bạn sẽ ghi đè giá trị trạng thái biểu mẫu bằng NULL.

Baud avatar
lá cờ sa
Đây là ma thuật. Bạn cứu ngày của tôi !!!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.