などと自問自答しながら作ってます。
開発中なのですが、特徴をはっきりさせておくために、ブログでまとめます。
◆まず、面白くも何ともない普通の特徴から。
- できるだけ簡単に使えるインターフェース、
- タイプ(テキスト、メールアドレスとか)を指定すると前もって決めておいたルールに従ってバリデーションする、
- フォーム入力だけでなく、普通の変数・配列でも適用可能。
とかでしょうか。
こういうのルールベースでのバリデーションとか言うのでしょうか。
◆これだけなら、別に作る必要はないわけで、一応自分なりの理由があって作ってます。ただ、他のValidatorクラスで実現してるか確認してはいませんが。
- バリデーション、サニテーション、フィルター、全部入り
- ルールの適用順番があらかじめ決まっている
- 複数に分割している項目も一つとしてバリデーション可能
- 配列入力もバリデーション可能
◆もう少し詳しく説明します。
1.全部入りルール
次のような3種類のルールがあると思うのですが、全部に対応しています。
- サニテーション:
ヌルバイトアタック、エンコーディングチェック、を行い、
問題があれば安全な内容で上書きします。 - フィルター:
全角→半角、大文字・小文字変換、その逆、など。 - バリデーション:
レギュラーエクスプレッションによるフォーマットチェックなど。
2.ルールの順番を決めてある
まぁ大量のルールがある訳です。
が、例えば日本語だと、大文字→小文字変換を行う前には、全角→半角に変換しないと行けません。こういう順番を意識してルールを適用しても問題がないよう、ルールの順番を内部で持ってます。
3.複数分割項目対応
日付など、一つのデータでありながらフォーム上は複数の項目から成り立っている場合があります。例えば
$_POST = array(
'date_y' => '2011',
'date_m' => '11',
'date_d' => '23',
);find( $_POST, 'name', array( 'multiple' => array(
'suffix' => array('y','m','d'),
'sformat' => '$4d/$02d/$02d',
) ) );
4.配列入力のバリデーション
フォームのチェックボックスからだと、入力が配列の場合があります。
入力が配列の場合でも、それぞれの要素ごとにルールを適用してバリデーションします。またエラーがあった場合は、入力と同じ構造でエラーメッセージを返します。
例えば、数値のみの入力を可能にしている場合、
input: $input = array( 0 => '1', 1=>'3', 2=>'x', 3=>'4' );
error: $error = array( 2=>'not a number' );
という構造でエラーメッセージを作ります。
◆ソースコード
まだ開発中。
Cena-DTA内に組み込む予定なので、それから公開します。
githubにおいてあるので、探せば見つかりますが。
0 件のコメント:
コメントを投稿