Niestandardowe sprawdzenie poprawności formularza?

30

Muszę dodać niestandardową weryfikację do formularza, pozwala na dodanie formularza artykułu.

Spodziewałem się czegoś takiego hook_FORM_ID_validate(), ale w dokumentacji API nie mogę znaleźć niczego, co mogłoby zmienić.

Jak dodać niestandardową weryfikację do formularza?

gilzero
źródło

Odpowiedzi:

57

Możesz dodać dowolną liczbę funkcji sprawdzania poprawności do dowolnej formy w następujący hook_form_FORM_ID_alter()sposób:

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"');
  }
}
Clive
źródło
Załóżmy, że dodałem niestandardową weryfikację formularza do formularza, który ma już 2 funkcje sprawdzania poprawności. Więc która jest pierwsza preferencja w Drupal 7?
Guru,
Który kiedykolwiek jest pierwszy w tablicy @Guru
Clive
Jeśli formularz jest formą_rejestracji_użytkownika, zawsze zachowuje "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Załóżmy, że dodam niestandardową weryfikację. Powinno to wyglądać tak: „[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)”. Ale najpierw chcę uruchomić funkcję „user_register_validate”.
Guru,
W przypadku innych pól musisz użyć:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy
jak ustawić sprawdzanie poprawności rozmiaru, rozszerzenia w ten sposób? I jeszcze jedno pytanie, czy istnieje funkcja ajax, taka jak „przesyłanie” i „usuwanie”, w jaki sposób obsługujemy sprawdzanie tego?
steniya
6

Należy użyć hook_form_alteri dodać swoją funkcję do #validatewłaściwości.

Countzero
źródło