Drupal: Webformにバリデーションを実装する
まとまった情報はそのうち会社のブログに書くとして、忘れないうちにメモ。
Webformのバリデーションについて調べてみると、まずWebform Validationというモジュールに行き着く。 https://www.drupal.org/project/webform_validation
Drupal 7ではこのモジュールが多く使われていたようだが、Drupal 8, 9へ対応したバージョンはアルファ版に留まっている。
続いてたどり着くのはこのページ。DrupalのWebformへバリデーションを実装する手順が記載されている。
https://www.drupal.org/docs/8/modules/webform/webform-cookbook/how-to-add-custom-validation-to-a-webform-element
hook_webform_element_alter()
を使用した実装はOld wayとなっており、対比してHandlerを使った実装方法が紹介されている。
この実装で必要な手順は大きく4つ。
webform/src/Plugin/WebformHandler/HogehogeWebformHandler.php
を作成validateForm()
メソッドを実装- 上記メソッド内で使用する
validateHogehoge()
メソッドを実装 - Webform管理画面からハンドラーを追加
1,2は概ねサンプルを見ながら書けば良い。
3に具体的なバリデーションロジックを書く。
用意したバリデーションを4でWebformに紐付ける。
hookを利用した実装と違うのは、バリデーション機能をハンドラーとして個々のWebformとは完全に切り離して実装できる点だろうか。
つまり、Handlerではどのフィールドにどういうバリデーションを実装するかだけを書いて、具体的にどのフォームで使うかということは考えなくて良い。
こうすることで、Webformが増えた際は管理画面からハンドラーを追加するだけで対応できるようになっている。
hookでWebformの種類をチェックして処理する実装だと、Webformを追加した際にコードを書き加える必要が出てくる。
ちなみに簡単なバリデーションはWebformのフィールド編集画面から追加できるため、まずはそれで対応できるかを考えた方が良い。
エンジニア一年生でもなんとかコードを書いてるので、Drupalの抽象化された仕組みは凄いな〜と思う。