Xác nhận tùy chỉnh cho một hình thức?


30

Tôi cần thêm xác nhận tùy chỉnh vào một biểu mẫu, giả sử thêm biểu mẫu bài viết.

Tôi đã mong đợi một cái gì đó như hook_FORM_ID_validate()để xử lý việc này, nhưng không thể tìm thấy bất cứ điều gì có liên quan trong tài liệu API.

Cách để thêm xác nhận tùy chỉnh vào một biểu mẫu là gì?

Câu trả lời:


57

Bạn có thể thêm bất kỳ số lượng chức năng xác thực vào bất kỳ hình thức nào hook_form_FORM_ID_alter()như sau:

function mymodule_form_article_node_form_alter(&$form, &$form_state, $form_id) {
  // There will already be some validate handlers added so you need to add to the
  // array rather than overwrite it.
  $form['#validate'][] = 'mymodule_article_form_validate';

  // As mentioned above you can add as many as you want
  $form['#validate'][] = 'mymodule_article_form_validate_2';
}

function mymodule_article_form_validate($form, &$form_state) {
  // Random example, if the title is 'test' throw an error
  if ($form_state['values']['title'] == 'test') {
    form_set_error('title', 'Title cannot be "test"');
  }
}

Giả sử tôi đã thêm xác thực biểu mẫu tùy chỉnh vào biểu mẫu đã có 2 chức năng xác thực. Sau đó, cái nào được ưu tiên đầu tiên trong drupal 7?

Mà là lần đầu tiên trong mảng @Guru
Clive

Nếu biểu mẫu là user_registration_form, thì nó luôn giữ "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Giả sử tôi sẽ thêm xác nhận tùy chỉnh. Sau đó, nó sẽ giống như thế này "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Nhưng tôi muốn chạy chức năng "user_register_validate" lúc đầu.

Đối với các lĩnh vực khác, bạn có thể sử dụng:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy

Làm thế nào để thiết lập xác nhận cho kích thước, mở rộng theo cách này? Và một câu hỏi nữa, nếu có chức năng ajax như "tải lên" và "loại bỏ" cách chúng tôi xử lý xác nhận cho việc này?
steniya

6

Bạn nên sử dụng hook_form_altervà thêm chức năng của bạn vào #validatetài sản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.