การตรวจสอบที่กำหนดเองสำหรับแบบฟอร์ม?


30

ฉันต้องการเพิ่มการตรวจสอบความถูกต้องที่กำหนดเองให้กับฟอร์มช่วยบอกว่าเพิ่มแบบฟอร์มบทความ

ฉันคาดหวังว่าhook_FORM_ID_validate()จะจัดการกับสิ่งนี้ แต่ไม่พบสิ่งใดที่เกี่ยวข้องในเอกสาร API

วิธีเพิ่มการตรวจสอบความถูกต้องที่กำหนดเองในแบบฟอร์มคืออะไร

คำตอบ:


57

คุณสามารถเพิ่มฟังก์ชั่นการตรวจสอบความถูกต้องจำนวนเท่าใดก็ได้ในรูปแบบใด ๆhook_form_FORM_ID_alter()ดังนี้:

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"');
  }
}

สมมติว่าฉันได้เพิ่มการตรวจสอบรูปแบบที่กำหนดเองไปยังแบบฟอร์มที่มีฟังก์ชันการตรวจสอบความถูกต้อง 2 รายการแล้ว ถ้าอย่างนั้นจะได้รับการตั้งค่าแรกใน drupal 7 คืออะไร?
คุรุ

ซึ่งเป็นครั้งแรกในอาร์เรย์ @Guru
Clive

ถ้าแบบฟอร์มคือ user_registration_form มันจะเก็บ "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)" สมมติว่าฉันกำลังจะเพิ่มการตรวจสอบที่กำหนดเอง จากนั้นควรเป็นเช่นนี้ "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)" แต่ฉันต้องการเรียกใช้ฟังก์ชัน "user_register_validate" ในตอนแรก
คุรุ

สำหรับสาขาอื่น ๆ คุณต้องใช้:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy

วิธีการตั้งค่าการตรวจสอบสำหรับขนาดส่วนขยายในลักษณะนี้? และอีกหนึ่งคำถามหากมีฟังก์ชั่นอาแจ็กซ์อย่าง "อัปโหลด" และ "ลบ" วิธีที่เราจัดการการตรวจสอบความถูกต้องสำหรับเรื่องนี้?
steniya

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.