カスタム処理を利用して、コンテンツ定義に独自のバリデーションを実装する

概要

カスタム処理とTriggerを使用して、コンテンツ追加または編集に独自のバリデーション処理を実装する方法を解説します。 この機能を利用すると、標準機能のみでは実現できない複雑な入力チェックを追加できます。

今回は、POSTされたメールアドレスが特定のドメインと一致しなければエラーを返すバリデーション処理を実装します。

学べること

以下の手順でコンテンツの追加・編集に独自のバリデーション処理を実装します。

前提条件

バリデーションを適用するコンテンツ定義は事前に作成されているものとします。
まだ作成していない場合はコンテンツ定義を作成するを参考にコンテンツ定義を作成してください。
また、バリデーションはコンテンツ定義の追加項目でテキストを利用した項目に適用します。

カスタム処理を作成する

バリデーション処理を記述するためのカスタム処理を用意します。

カスタム処理の一覧画面を表示する

メニューの[オペレーション] -> [カスタム処理] をクリックします。

Image from Gyazo

カスタム処理の編集画面を表示する

カスタム処理一覧画面の右上の [追加] をクリックします。

Image from Gyazo

タイトル・カテゴリ等を入力する

カスタム処理のタイトル、カテゴリ、識別子とこれを使ったコンポーネントを入力します。

今回は下記のように入力しました。

  • タイトル:email_damain_validation
  • 識別子:email_damain_validation

同一カテゴリ内にタイトルが重複する処理を作成できないため、他と重複しないタイトルを命名してください。

Image from Gyazo

カスタム処理を保存する

一旦ここまでで保存します。 画面下部までスクロールし、[追加する] ボタンをクリックして保存します。

Image from Gyazo

バリデーション処理を記述する

次に、バリデーション処理を記述します。

カスタム処理編集画面を表示する

サイドメニューより[オペレーション]を選択し、[カスタム処理]をクリックします。

Image from Gyazo

先ほど追加したカスタム処理のタイトルをクリックします。

Image from Gyazo

カスタム処理の編集画面に戻り、エディタ内にバリデーション処理を記述していきます。

Image from Gyazo

エラー変数を初期化する

バリデーション結果を格納するための$errors変数を初期化します。

変数名説明
$errorsarrayテキスト配列

エディタに下記記入します。

{* $errors = [] *}
{assign_array var="errors" values=""}

Image from Gyazo

バリデーション処理を実装する

ユーザーの入力値をチェックし、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の部分は自身のサイトの、バリデーションを適用する項目に調整してください。

Image from Gyazo

保存する

処理の記述が完了したら、[更新する] ボタンをクリックし保存してください。 Image from Gyazo

カスタム処理にコンテンツ定義を関連付ける

次にコンテンツ定義をカスタム処理に関連付けます。

コンテンツ定義一覧画面を表示する

[コンテンツ定義] をクリックします。

Image from Gyazo

コンテンツ定義IDカスタム処理に関連付ける

コンテンツ定義IDを作成したカスタム処理に関連付けます。

  • これを使ったコンポーネント:コンテンツのバリデーション前
  • 値:カスタム処理を適用するコンテンツ定義ID

Image from Gyazo

保存する

コンテンツ定義IDの入力が完了したら、[更新する] ボタンをクリックし保存してください。

Image from Gyazo

バリデーションの動作を確認する

コンテンツ編集画面からリクエストを行い、バリデーション処理の動作を確認します。

コンテンツ編集を表示する

コンテンツ一覧画面よりコンテンツをクリックし、コンテンツ編集画面を表示します。

Image from Gyazo

エラーが出力される値を入力する

下記の通り、エラーが出力される値を[email]に入力します。 入力が完了したら、[更新] ボタンをクリックします。

Image from Gyazo

エラー内容を確認する

想定通りのエラーが出力されることを確認します。

Image from Gyazo

以上でカスタム処理とコンテンツ定義の関連付けが完了です。

バリデーションエラーが発生しない場合の確認ポイント

入力チェックが想定通りに行われない場合は、下記のポイントを確認してください。

  • 関連付いているカスタム処理が正しいか
  • 変数名(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}

関連ドキュメント

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。