Điểm:0

Làm cách nào để thêm trường vào biểu mẫu nút?

lá cờ km

Mục tiêu là đặt bộ đếm mặc định, nhưng để mọi người ghi đè lên nó. Bộ đếm phải là giá trị lớn nhất của trường cộng với 1.

Sử dụng một người đăng ký sự kiện, sự kiện FORM ALTER.

hàm tĩnh công khai getSubscribeEvents(): mảng {
  trở lại [
    HookEventDispatcherInterface::FORM_ALTER => 'setDefaultCbid',
    HookEventDispatcherInterface::ENTITY_PRE_SAVE => 'checkCbiRaceCondition'
  ];
}


chức năng công khai setDefaultCbid(FormAlterEvent $event) {

  $form_id = $event->getFormId();
  if ($form_id !== 'node_bond_edit_form') {
    trở lại;
  }

  $result = \Drupal::database()
    -> truy vấn ('chọn giá trị tối đa (trường_bond_cbid_value) từ {node__field_bond_cbid}')
    ->fetchField();

  nếu ($kết quả) {
    $cbid = $result + 1;
  }
  khác {
    $cbid = 1;
  }

  $form = &$event->getForm();
  $form_already_alterered = sai;
  if (array_key_exists('field_bond_cbid_default', $form)) {
    $form_already_alterered = TRUE;
  }
  $form['field_bond_cbid_default'] = [
    '#title' => $this->t('cbid mặc định'),
    '#type' => 'số',
    '#value' => $cbid,
  ];

  nếu (!$form_already_alterered) {
    $form['field_bond_cbid']['widget'][0]['value']['#default_value'] = $cbid;
  }
}

Điều này hoạt động tốt. Giá trị được đặt và trường "mặc định" hiển thị trong biểu mẫu đã điều chỉnh

Lĩnh vực mới ở đây

Điều gì xảy ra nếu một người thứ hai chỉnh sửa một nút khác và tăng bộ đếm khiINCORRECTCODEile biểu mẫu được hiển thị? Đây là đâu field_bond_cbid_default không có sẵn trên thực thể

kiểm tra chức năng công khaiCbiRaceCondition(EntityPresaveEvent $event) {   

  $bond = $event->getEntity();
  if ($bond->bundle() !== 'bond') {
  trở lại;
}

$enteredValue = $bond->get('field_bond_cbid')->getString();
$defaultCbid = $bond->get('field_bond_cbid_default')->getString();
if ($enteredValue != $defaultCbid) {

Trường không có sẵn

Làm cách nào để truy cập giá trị mặc định?

Điểm:2
lá cờ km

Sự kiện thay đổi biểu mẫu là sự kiện kiểm tra dữ liệu sai. Thay vì cố gắng xử lý biểu mẫu, hãy sử dụng thực thể hỗ trợ.

Trên biểu mẫu thay đổi sự kiện thêm một trình xử lý

$form['actions']['submit']['#submit'][] = [$this, 'checkCbid'];

Kiểm tra xem giá trị có phải là giá trị mới nhất khi gửi không

chức năng công khai checkCbiRaceCondition(&$form, FormState &$form_state) {
  $enteredValue = $form_state->getValue('field_bond_cbid')[0]['value'];
  $defaultCbid = $form['field_bond_cbid']['widget'][0]['value']['#default_value'];
  if (intval($enteredValue) != $defaultCbid) {
    trở lại;
  }

  $result = \Drupal::database()
    -> truy vấn ('chọn giá trị tối đa (trường_bond_cbid_value) từ {node__field_bond_cbid}')
    ->fetchField();

  nếu ($kết quả) {
    $cbid = $result +1;
  } khác {
    $cbid = 1;
  }

  $form_state->set('field_bond_cbid', $cbid);
}

Đă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.