Điểm:0

Làm cách nào để thêm ràng buộc vào thành phần biểu mẫu tùy chỉnh?

lá cờ fr

Tôi đang cố gắng tạo một biểu mẫu đơn giản với một trường duy nhất. Tôi có một ràng buộc tùy chỉnh được tạo để xác thực trường tùy chỉnh.

Tôi muốn thêm cùng một ràng buộc vào phần tử biểu mẫu, thay vì sao chép mã từ lớp ràng buộc trong trình xử lý xác thực biểu mẫu.

không gian tên Drupal\mymodule\Form;

sử dụng Drupal\Core\Form\FormBase;
sử dụng Drupal\Core\Form\FormStateInterface;

/**
 * Cung cấp biểu mẫu Mô-đun của tôi.
 */
lớp Ví dụForm mở rộng FormBase {

  /**
   * {@inheritdoc}
   */
  hàm công khai getFormId() {
    trả về 'mymodule_example';
  }

  /**
   * {@inheritdoc}
   */
  chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {

    $form['nội dung'] = [
      '#type' => 'vùng văn bản',
      '#title' => $this->t('Tin nhắn'),
      '#required' => ĐÚNG,
    ];

    $form['hành động'] = [
      '#type' => 'hành động',
    ];
    $form['actions']['submit'] = [
      '#type' => 'gửi',
      '#value' => $this->t('Gửi'),
    ];

    trả về biểu mẫu $;
  }

  /**
   * {@inheritdoc}
   */
  hàm công khai validateForm(mảng &$form, FormStateInterface $form_state) {
    // Kiểm tra xem có thể sử dụng ->addConstraint() tại đây không
    if (mb_strlen($form_state->getValue('message')) < 10) {
      $form_state->setErrorByName('name', $this->t('Tin nhắn phải có ít nhất 10 ký tự.'));
    }
  }

  /**
   * {@inheritdoc}
   */
  hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) {
    $this->messenger()->addStatus($this->t('Tin nhắn đã được gửi.'));
    $form_state->setRedirect('<front>');
  }

}

Có thể không?

lá cờ ru
Không, và nó không có ý nghĩa gì cả. Các ràng buộc đảm bảo tính toàn vẹn của dữ liệu và do đó được gắn vào các trường đơn lẻ, không phải biểu mẫu. Xác thực mẫu OTOH đảm bảo logic kinh doanh.
lá cờ ru
Ví dụ."ngày sinh nhật phải ở dạng YYYY-MM-DD" là một ví dụ cho các ràng buộc. "Nếu ngày sinh nhật >= 2010-01-01 field_parent_name không được để trống" là một ví dụ cho logic nghiệp vụ. Các ràng buộc luôn được kiểm tra ở cấp độ lưu trữ, độc lập với mọi hình thức.

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