Form API / フォーム API
最終更新日:2018年12月13日
Form API とはフォームを描画するための API です。特徴 としては下記が挙げられます。
- 一貫したHTMLの出力
- あるモジュール(コアも含む)によって作成されたフォームは、別のモジュールによって簡単に手を加えられる
- ファイルのアップロードや投票ウィジェットのような複雑なフォームを、表示とロジックを含んだ再利用可能なパーツとしてまとめられる
- CSRF 対策などのセキュリティ対策を Form API が担ってくれる
ここまでは Drupal 7 も Drupal 8 も同じなのですが、Drupal 8 では使用する関数や仕組みが大きく変わり、実装方法も全くの別物になりました。それぞれ簡単に紹介します。
Drupal 8 の Form API の特徴
Drupal 8 では FormBase
、 ConfigFormBase
、 ConfirmFormBase
のいずれかを継承したクラス内に、 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