バリデーションと確認画面処理

Chimpanzeeでは入力値の確認機能として以下のものを実装しています。

これらの設定について説明します。実際に処理を行う(メソッドを実行する)ところについてはフォーム処理のフォームからの値の受け取り確認画面処理を参照してください。

バリデーション

バリデーションには必須チェック、一致チェック、その他の形式チェックがあります。クライアントがフォームに入力したデータをCZForm::saveValues(array $values)CZForm::saveValuesByPost()で取り込む際にこれらのバリデーションが行われ、データが不適だった場合にエラーメッセージが返ってきます。

必須チェック

入力定義配列のキーrequired_flagで必須チェックを行うかどうかを指定します。入力タググループに対してTRUEを設定する場合、グループ内の入力タグのいずれか一つにでも入力漏れがあるとエラーを返します。

一致チェック

入力定義配列のキーconfirmで一致対象とする入力タグ名を指定します。confirmを設定した入力タグの入力値がconfirmで指定した(設定値となっている)入力タグの入力値と一致しない場合、confirmを設定した入力タグのほうでエラーを返します。

形式チェック

入力定義配列のキーvalidateで、バリデーション関数、引数、エラーメッセージをフィルタ配列形式で指定します。

'validate' => array(
	'func'		=> 関数名,
	'params'	=> array(
		// 引数の指定
	),
	'err_msg'	=> 'エラーメッセージ',
)

フィルタ配列の要素等、詳細はフィルタ配列を参照してください。

単一の入力タグのみならずグループに対してもバリデーションは可能です。

単一の入力タグに対するバリデーション

たとえば以下のフォーム

<input type="text" name="phone01" value="" size="11" />

で電話番号形式のバリデーションを行うことにします。この場合

'phone01' => array(
	'type'		=> 'text',
	'option'	=> 'size="11"',
	'validate'	=> $filter,
)

$filterについて、バリデーション関数cz_tel_num($params)(ただし$params = array('subject' => 入力タグの値))を用いて

$filter = array(
	'func'		=> 'cz_tel_num',
	'params'	=> array(
		'subject'	=> array('ref' => 'phone01'),
	),
);

となります。ただし$params = array('subject' => 入力タグの値)

'params' => array(
	'subject'	=> array('ref' => 指定の入力タグ),
),

となる場合はparamsを省略できますので

$filter = array(
	'func'		=> 'cz_tel_num',
);

のみで結構です。このバリデーションの実装例がこちらの「phone01」です。

バリデーション関数の詳細はChimpanzee実装済みのバリデート関数関数を自作する場合を参照してください。

グループに対するバリデーション

複数の入力タグをグループ化した以下のフォーム

<input type="text" name="year01" value="" size="4" />年
<input type="text" name="month01" value="" size="2" />月
<input type="text" name="day01" value="" size="2" />日

で年月日形式のバリデーションを行う場合、

'date01' => array(
	'parts'		=> array(
		'year01' => array(
			'type'		=> 'text',
			'tail_str'	=> '年',
			'option'	=> 'size="4"',
		),
		'month01' => array(
			'type'		=> 'text',
			'tail_str'	=> '月',
			'option'	=> 'size="2"',
		),
		'day01' => array(
			'type'		=> 'text',
			'tail_str'	=> '日',
			'option'	=> 'size="2"',
		),
	),
	'validate'	=> $filter,
)

$filterを指定することになります。バリデーション関数cz_date_parts($params)(ただし$params = array('year' => 年の値, 'month' => 月の値, 'day' => 日の値))を用いて

$filter = array(
	'func'		=> 'cz_date_parts',
	'params'	=> array(
		'year'	=> array('ref' => 'year01'),
		'month'	=> array('ref' => 'month01'),
		'day'	=> array('ref' => 'day01'),
	),
);

となります。このバリデーションの実装例がこちらの「date01」です。

複数のチェックボックスをグループ化して値の整合性を確認することもできます。

<input type="checkbox" name="check06" id="check06" value="1" />
<label for="check06">PHP</label>
<input type="checkbox" name="check07" id="check07" value="1" />
<label for="check07">Java</label>
<input type="checkbox" name="check08" id="check08" value="1" />
<label for="check08">Ruby</label>
<input type="checkbox" name="check09" id="check09" value="1" />
<label for="check09">プログラムを書けない</label>

で、check06~check08のいずれかにチェックが入っているときcheck09のチェックが入っていたら無効とする場合を考えます。

まずユーザ定義のバリデーション関数

check_pg($params = array(
	'php'	=> PHPのチェック, 
	'java'	=> Javaのチェック, 
	'ruby'	=> Rubyのチェック, 
	'none'	=> 書けないチェック,
))

を作ります。フレームワークの拡張クラスValidateのメソッドcheck_pg()として定義します。

<?
class Validate extends CZFunc {
	public function check_pg($params) {
		if ( $params['php'] || $params['java'] || $params['ruby'] ) {
			if ($params['none']) return 'チェックが不適切です。';
		} elseif ( !$params['php'] && !$params['java'] && !$params['ruby']) {
			if (!$params['none']) return 'チェックが不適切です。';
		}
	}
}
?>

これをextensions/Validate.phpとして配置します。入力タグの設定は

'chkgrp02' => array(
	'caption'	=> '得意なプログラム言語は',
	'parts'		=> array(
		'check06' => array(
			'type'		=> 'checkbox',
			'label'		=> 'PHP',
			'default_value'	=> TRUE,
		),
		'check07' => array(
			'type'		=> 'checkbox',
			'label'		=> 'Java',
		),
		'check08' => array(
			'type'		=> 'checkbox',
			'label'		=> 'Ruby',
		),
		'check09' => array(
			'type'		=> 'checkbox',
			'label'		=> 'プログラムを書けない',
		),
	),
	'validate'	=> $filter,
),
$filter = array(
	'func'		=> array('Validate', 'check_pg'),
	'params'	=> array(
		'php'	=> array('ref' => 'check06'),
		'java'	=> array('ref' => 'check07'),
		'ruby'	=> array('ref' => 'check08'),
		'none'	=> array('ref' => 'check09'),
	),
);

となります。このバリデーションの実装例がこちらの「得意なプログラム言語は」です。

バリデーションのパイプライン処理

複数のバリデーション関数をパイプライン処理することも可能です。フィルタの指定のときに

$filter = array(
	array(
		'func'		=> '関数1',
		'params'	=> array(
			...
		),
	),
	array(
		'func'		=> '関数2',
		'params'	=> array(
			...
		),
	),
		:
);

のようにフィルタ配列そのものを配列として並べると上から順に関数を実行していきます。

確認画面処理

CZForm::getConfirmHtmlなどで自動生成される確認画面での表示に関連した処理です。

表示値のコンバート

フォームの入力値に変換処理を施して確認画面に表示することができます。セッションに格納される値には影響しない、確認のための表示上の機能です。モデルと連携してデータベースに書き込む処理をする場合はモデルの設定で書き込む値に対して同様の変換処理をすることが可能で、この機能とセットで利用することが多いです。

入力定義配列のキーconvertで、変換関数と引数をフィルタ配列形式で指定します。

'convert' => array(
	'func'		=> 関数名,
	'params'	=> array(
		// 引数の指定
	),
)

フィルタ配列の要素等、詳細はフィルタ配列を参照してください。

アップロードされたファイルの表示

input[type='file']の場合、入力定義配列のキーimage_flagをTRUEにすると確認画面でアップロードしたファイルを表示することができます。その際縮小表示も可能で、image_max_widthimage_max_heightで縦横の最大サイズをピクセル単位で指定します。

'image_flag' => TRUE,
'image_max_width' => 200,
'image_max_height' => 300,

以上の設定の場合、たとえばアップロードする画像サイズが縦500×横400ピクセルのとき、確認画面では縦300×横200ピクセルに収まるサイズすなわち縦250×横200ピクセルで表示されます。

画像ファイル以外の場合、アップロードした元ファイル名を表示します。

関連するページ

ページトップへ