Điểm:-2

Phần tử trường văn bản tùy chỉnh, giá trị $form_state khác và giá trị '#value' của phần tử

lá cờ cn

Tôi có một phần tử trường văn bản (có tên là 'bus_station'), chứa tên trạm xe buýt.

Tôi đang tìm cách tạo phần tử 'bus_station' tùy chỉnh (có thể mở rộng lớp Textfield), phần tử này sẽ:

  • Vẫn mong đợi một đầu vào văn bản ở dạng tên trạm xe buýt (và giữ lại nó trong quá trình $form_state->setRebuild() và hiển thị nó cho người dùng), nhưng
  • Trong $form_value, sau khi gửi biểu mẫu, hoặc cung cấp một SAI (mã tùy chỉnh trong Định nghĩa phần tử không nhận ra đầu vào là trạm) hoặc THẬT (nó nhận ra một trạm)? Hoặc Entity ID (ID của trạm xe buýt phù hợp) và/hoặc VÔ GIÁ TRỊ (không có trận đấu)?
Điểm:0
lá cờ cn

Điều này có thể được thực hiện thông qua triển khai gọi lại API Biểu mẫu:

Phía trong mô-đun/src/Element/ElementClass.php, Trong hàm công khai getInfo() {} xác định một cuộc gọi lại, ví dụ: processMyElement Dưới '#tiến trình' Chìa khóa:

hàm công khai getInfo() {
  $class = tĩnh::class;
  trở lại [
    // […] Một số định nghĩa khác.
    '#quy trình' => [
      [$class, 'processMyElement'],
    ],
  ];
}

Và sau đó thực hiện hai hoạt động bổ sung.

(1) Xử lý đầu vào của người dùng và trả về một giá trị sẽ được cung cấp trong '#form_state' giá trị trong valueCallback() phương pháp:

hàm tĩnh công khai valueCallback(&$element, $input, FormStateInterface $form_state) {
  $output = parent::valueCallback($element, $input, $form_state);
  if ($input == 'SOMETHING') {
    $output = 'SOMETHING_ELSE';
  }
  trả lại đầu ra $;
}

(2) Và ngược lại, trong processMyElement() phương thức trả về giá trị ban đầu:

hàm tĩnh công khai processMyElement(&$element, FormStateInterface $form_state, &$complete_form) {
  if ($element['#value'] == 'SOMETHING_ELSE') {
    $element['#value'] = 'SOMETHING';
  }
  trả lại phần tử $;
}

ví dụ sử dụng

Tôi đã sử dụng điều này để mở rộng Drupal\Core\Render\Element\Textfield class kết hợp với JS Storage Complete. Điều đó mang lại cho tôi Tự động điền (không cần URL gọi lại). Tính năng tự động hoàn thành này trả về ID thực thể thu được thông qua tải thực thể dựa trên nhãn duy nhất bên trong valueCallback() phương pháp, nhưng người dùng vẫn được trình bày với đầu vào văn bản của nó (thu được bằng cách quay lại $entity->nhãn() phía trong processMyElement() phương pháp).

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