カスタム処理を利用して、コンテンツ定義に独自のバリデーションを実装する
概要
カスタム処理とTriggerを使用して、コンテンツ追加または編集に独自のバリデーション処理を実装する方法を解説します。 この機能を利用すると、標準機能のみでは実現できない複雑な入力チェックを追加できます。
今回は、POSTされたメールアドレスが特定のドメインと一致しなければエラーを返すバリデーション処理を実装します。
学べること
以下の手順でコンテンツの追加・編集に独自のバリデーション処理を実装します。
前提条件
バリデーションを適用するコンテンツ定義は事前に作成されているものとします。
まだ作成していない場合はコンテンツ定義を作成するを参考にコンテンツ定義を作成してください。
また、バリデーションはコンテンツ定義の追加項目でテキストを利用した項目に適用します。
カスタム処理を作成する
バリデーション処理を記述するためのカスタム処理を用意します。
カスタム処理の一覧画面を表示する
メニューの[オペレーション] -> [カスタム処理] をクリックします。
カスタム処理の編集画面を表示する
カスタム処理一覧画面の右上の [追加] をクリックします。
タイトル・カテゴリ等を入力する
カスタム処理のタイトル、カテゴリ、識別子とこれを使ったコンポーネントを入力します。
今回は下記のように入力しました。
- タイトル:email_damain_validation
- 識別子:email_damain_validation
同一カテゴリ内にタイトルが重複する処理を作成できないため、他と重複しないタイトルを命名してください。
カスタム処理を保存する
一旦ここまでで保存します。 画面下部までスクロールし、[追加する] ボタンをクリックして保存します。
バリデーション処理を記述する
次に、バリデーション処理を記述します。
カスタム処理編集画面を表示する
サイドメニューより[オペレーション]を選択し、[カスタム処理]をクリックします。
先ほど追加したカスタム処理のタイトルをクリックします。
カスタム処理の編集画面に戻り、エディタ内にバリデーション処理を記述していきます。
エラー変数を初期化する
バリデーション結果を格納するための$errors変数を初期化します。
変数名 | 型 | 説明 |
---|---|---|
$errors | array | テキスト配列 |
エディタに下記記入します。
{* $errors = [] *}
{assign_array var="errors" values=""}
バリデーション処理を実装する
ユーザーの入力値をチェックし、errors変数に結果を代入します。
入力値を参照するためには、下記のいずれかの変数を利用します。
変数名 | 説明 |
---|---|
$smarty.post | 画面から入力されたフォームデータ |
{assign_array var="errors" values=""}
{* [例] POSTされたメールアドレスが特定のドメインと一致しなければエラーを返す *}
{if $smarty.post.ext_24|strpos:'@example.com' === false}
{* $errors = ["メールアドレスが不正です。"] *}
{assign var="errors." value="メールアドレスが不正です。"}
{/if}
ext_24
の部分は自身のサイトの、バリデーションを適用する項目に調整してください。
保存する
処理の記述が完了したら、[更新する] ボタンをクリックし保存してください。
カスタム処理にコンテンツ定義を関連付ける
次にコンテンツ定義をカスタム処理に関連付けます。
コンテンツ定義一覧画面を表示する
[コンテンツ定義] をクリックします。
コンテンツ定義IDカスタム処理に関連付ける
コンテンツ定義IDを作成したカスタム処理に関連付けます。
- これを使ったコンポーネント:コンテンツのバリデーション前
- 値:カスタム処理を適用するコンテンツ定義ID
保存する
コンテンツ定義IDの入力が完了したら、[更新する] ボタンをクリックし保存してください。
バリデーションの動作を確認する
コンテンツ編集画面からリクエストを行い、バリデーション処理の動作を確認します。
コンテンツ編集を表示する
コンテンツ一覧画面よりコンテンツをクリックし、コンテンツ編集画面を表示します。
エラーが出力される値を入力する
下記の通り、エラーが出力される値を[email]に入力します。 入力が完了したら、[更新] ボタンをクリックします。
エラー内容を確認する
想定通りのエラーが出力されることを確認します。
以上でカスタム処理とコンテンツ定義の関連付けが完了です。
バリデーションエラーが発生しない場合の確認ポイント
入力チェックが想定通りに行われない場合は、下記のポイントを確認してください。
- 関連付いているカスタム処理が正しいか
- 変数名(errors)が正しいか
- チェック対象の項目名が正しいか
- バリデーション処理のロジックが正しいか
コード例の紹介
カスタム処理に利用できるコード例を紹介します。
変数名 | 説明 |
---|---|
$smarty.get | クエリパラメータ |
$smarty.post | 画面から入力されたフォームデータ |
$smarty.request | クエリパラメータ & 画面から入力されたフォームデータ |
特定の文字列を含むかどうかをチェックする
{if $smarty.post.column_name|strpos:"期待する文字列" === false}
{assign var="errors." value="column_nameが不正です。"}
{/if}
数値かどうかをチェックする
{if !$smarty.post.parameter_name|is_numeric}
{assign var="errors." value="parameter_nameは数値で入力してください。"}
{/if}
特定の項目に依存した入力チェックを行う
{*
[例] ext_1に1が入力された場合のみ、ext_2を必須項目とする
ext_1: セレクト項目 ('', '1', '2')
ext_2: テキスト項目
*}
{if $smarty.post.ext_1 === '1' || (
!$smarty.post.ext_1|@empty &&
$smarty.post.ext_1.key === '1'
)}
{if !isset($smarty.post.ext_2) || $smarty.post.ext_2 === ''}
{assign var="errors." value="テキスト項目は必須項目です。"}
{/if}
{/if}
特定のグループに所属するメンバーにのみ入力チェックを適用する
{*
member_group_id=1は管理者権限グループになります。
*}
{assign var="member_group_id" value="1"}
{if $member_group_id|rcms_in_array:$smarty.session.arrGroup_id}
{if !isset($smarty.post.ext_1)}
{assign var="errors." value="ext_1は必須項目です。"}
{/if}
{/if}