Пользовательская проверка формы?

30

Мне нужно добавить пользовательскую проверку формы, скажем, добавить форму статьи.

Я ожидал что-то вроде hook_FORM_ID_validate()этого, но не могу найти ничего подходящего в документации API.

Как добавить пользовательскую проверку в форму?

gilzero
источник

Ответы:

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 }
Крис Happy
Как установить проверку размера, расширения таким образом? И еще один вопрос, есть ли такая функциональность ajax, как «загрузить» и «удалить», как мы справляемся с проверкой?
Стения
6

Вы должны использовать hook_form_alterи добавить свою функцию в #validateсобственность.

CountZero
источник