メインコンテンツまでスキップ

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

概要

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

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

学べること

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

事前準備

バリデーションを適用するコンテンツ定義を作成する

まず、バリデーションを適用するコンテンツ定義を作成します。

Kuroco管理画面のサイドメニューから[コンテンツ定義]をクリックします。
Image from Gyazo

画面右上の[追加]をクリックします。
Image from Gyazo

以下の通り入力します。

  • 名前:カスタムバリデーション実装対象コンテンツ
  • フィールド:以下の通り

Image from Gyazo Image from Gyazo

設定後、[追加]をクリックしてコンテンツ定義を追加します。
Image from Gyazo

カスタム処理を作成する

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

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

Image from Gyazo

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

Image from Gyazo

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

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

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

  • タイトル:email_domain_validation
  • 識別子:email_domain_validation
ヒント

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

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_1|strpos:'@example.com' === false}
{* $errors = ["メールアドレスが不正です。"] *}
{assign var="errors." value="メールアドレスが不正です。"}
{/if}

Image from Gyazo

保存する

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

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

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

コンテンツ定義リスト画面で、関連付けるコンテンツ定義のIDを確認する

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

Image from Gyazo

事前準備で作成したコンテンツ定義のIDを確認します。 Image from Gyazo

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

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

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

保存する

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

Image from Gyazo

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

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

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

事前準備で作成したコンテンツの一覧画面で[追加]をクリックします。
Image from Gyazo

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

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

Image from Gyazo 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コミュニティにご参加ください。