フォーム機能で作成した設問に対するカスタム・バリデーションをプラグインで作成することができます。ここでは、設問タイプ「Text Input Group(テキスト(複数欄)」を用いて作成した設問の値がすべて数字かどうかをチェックするプラグインを紹介します。管理画面(CMS)の入力項目に対するバリデーションについては以下を参照してください。
作成された設問は、公開側ページでは以下の画像のようになります(Websiteテーマを適用している時)。
プラグインの作成方法の基本については、以下のドキュメントを参照してください。
plugins/
└ CustomValidation/ (root)
├ config.json (定義ファイル)
├ CustomValidation.php (プラグイン・クラス)
└ locale/
├ en.json (翻訳ファイル)
└ ja.json (翻訳ファイル)
カスタム・バリデーションを追加するには、config.jsonに「form_validations」というキーで記述します。
{
"label" : "CustomValidation",
"id" : "customvalidation",
"component" : "CustomValidation",
"version" : "1.0",
"author" : "Alfasado Inc.",
"author_link" : "https://alfasado.net/",
"description" : "It provides custom form validation.",
"form_validations": {
"custom_validation": {
"component" : "CustomValidation",
"label" : "Custom Validation",
"method" : "custom_form_validation"
}
}
}
キー | 値 |
---|---|
component | PHPのクラス名 |
label | ドロップダウンに表示されるラベル |
method | PHPクラスのメソッド |
PHPのメソッドは以下の通りです。
function custom_form_validation ( $app, $question, $value, &$error_msg ) {
$values = $app->param( 'question_' . $question->basename );
// { [0]=> string(2) "03" [1]=> string(3) "1000" [2]=> string(3) "2000" }
// $value => "03-1000-2000"
foreach ( $values as $v ) {
if (! ctype_digit( $v ) ) {
$error_msg = $this->translate( 'The all values must be number.' );
return false;
}
}
return true;
}
第二引数に設問オブジェクト、第三引数に値(この場合、セパレータが「-」なのでそれぞれのフィールドに入力された値を「-」で連結した値が格納されます)、第4引数(リファレンスとして&付きで受け取ります)にエラーメッセージが渡されます。
テキスト(複数の値)形式の設問に入力した値は、「question_」+設問のベースネームとして受け取ると各値の配列となりますので、値をループでチェックします。バリデーション実装のルールは以下の通りです。