フォームのカスタム検証?


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 }
クリス・ハッピー

この方法でサイズ、拡張子の検証を設定する方法は?もう1つ質問があります。「アップロード」や「削除」などのajax機能がある場合、この検証をどのように処理するのでしょうか
steniya

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.