Form API / フォーム API

最終更新日:2018年12月13日

Form API とはフォームを描画するための API です。特徴 としては下記が挙げられます。

  1. 一貫したHTMLの出力
  2. あるモジュール(コアも含む)によって作成されたフォームは、別のモジュールによって簡単に手を加えられる
  3. ファイルのアップロードや投票ウィジェットのような複雑なフォームを、表示とロジックを含んだ再利用可能なパーツとしてまとめられる
  4. CSRF 対策などのセキュリティ対策を Form API が担ってくれる

ここまでは Drupal 7 も Drupal 8 も同じなのですが、Drupal 8 では使用する関数や仕組みが大きく変わり、実装方法も全くの別物になりました。それぞれ簡単に紹介します。

Drupal 8 の Form API の特徴

Drupal 8 では FormBaseConfigFormBaseConfirmFormBase のいずれかを継承したクラス内に、 Form API の仕様に沿った配列を定義することで、 HTML に変換され、フォームがユーザーに表示することが出来ます。

フォームが表示されるURLにPOSTでリクエストされたときは、フォームを表示する代わりに、実行するにふさわしいフォームのバリデーションと送信処理が呼び出されます。

フォームの種類

  • 一般的なフォーム: FormBaseを継承
  • 管理者が更新するモジュールの設定フォーム: ConfigFormBaseを継承
  • コンテンツや設定を削除するフォームで、確認を必要とするフォーム: ConfirmFormBaseを継承

実装が必要なメソッド

  • getFormId()
  • buildForm()
  • submitForm()

詳しくは下記リンクをご参照ください。
https://www.drupal.org/docs/8/api/form-api/introduction-to-form-api

Drupal 7 の Form API の特徴

Drupal 7 では hook_form() 関数を使って API の仕様に沿った配列を定義することでフォームを作成します。 フォーム送信時のバリデーションと送信処理はカスタムモジュール内で作成した hook_form() 関数内でバリデーションと送信処理用のコールバック関数を定義し、それぞれの関数内で処理を行います。

既存のフォームに手を加えたい場合は hook_form_alter() 関数 を使って手を加えます。

詳しくは下記リンクをご参照ください。
https://www.drupal.org/docs/7/api/form-api