Simple Validation Framework Haraiso
ここのところ、夜なべして作っていたのがようやく形になったので公開します。
コメントアノテーションで Validation を行います。使い方はとても簡単。
- localdisk / Haraiso / Downloads — Bitbucketより Zip ファイルをダウンロードして解凍
- 解凍してできた Haraiso ディレクトリを include_path に含める
- あとはこんなこんな感じに書く
<?php require_once 'Haraiso.php'; class Paraiso { /** * foo * * @var string * @Required(arg = なまえ) * @Alpha(arg = なまえ) */ public $name = ''; /** * Constructor */ public function __construct() { $h = new Haraiso(); $h->validate($this, 'callback'); } public function callback($messages) { echo 'callback' . "\n"; var_dump($messages); } } new Paraiso();
- Haraiso.php を require_once
- $name フィールドのコメントに @Required と @Alpha アノテーションを定義
- Haraiso を new して validate メソッドをコール
結果
callback
array(2) {
[0]=>
object(Message)#5 (3) {
["_name:private"]=>
string(4) "name"
["_value:private"]=>
string(0) ""
["_message:private"]=>
string(30) "なまえは必須入力です"
}
[1]=>
object(Message)#6 (3) {
["_name:private"]=>
string(4) "name"
["_value:private"]=>
string(0) ""
["_message:private"]=>
string(63) "なまえはアルファベットでなければなりません"
}
}肝は Haraiso#validate メソッドです。以下説明。
Haraiso#validate($obj, $callback)
第1引数が検証対象のオブジェクト、第2引数がコールバック。コールバックを定義した場合検証終了後コールバックに処理が移ります。コールバックの引数には結果を格納した array が入ってます。上記のようにエラーがある場合は Message オブジェクトの配列になります。エラーのない場合は空の配列を戻します。
コールバックは省略が可能です。省略した場合は validate メソッドの検証結果が戻り値になります。
フィールドの定義
もう一つの肝がフィールドの定義です。以下の形式に対応してます。
- public フィールド
- protected/private フィールド getter あり。
- protected/private フィールド __get あり。
メッセージ
メッセージは ini ファイル形式になってます。ファイルの置き場所は \Haraiso\resource. 命名規約は messages_(Locale).ini です。標準で messages_ja.ini が添付されていますので確認してみてください。
アノテーション
Haraiso は以下のアノテーションを備えています。
- Alpha(アルファベット)
- AlphaNum(半角英数)
- Date(日付)*1
- Email(メールアドレス)
- Ext(拡張子)
- Hankana(半角カタカナ)
- Hiragana(ひらがな)
- Katakana(カタカナ)
- Length(文字列長)
- Num(数字)
- Phone(電話番号)
- Required(必須)
- Url(URL)
- Zenkaku(全角)
- Zip(郵便番号)
各アノテーションの使用例はlocaldisk / Haraiso / source / Test.php — Bitbucketを参照してみてください。
アノテーション属性
- arg(メッセージの引数。複数指定したい場合は'|'を指定します)ex.@Length(arg = password|6|20)
- key(メッセージのkey. 省略可能。省略した場合は Validator の名前を小文字に変換したものが key になります)ex.Required -> required
- 他アノテーションによって色々。
Validator の追加も簡単にできるようにしています。\Haraiso\validator\impl に AbstractValidator を継承したクラスをつくって validate メソッドを実装するだけ。
最後に
Validator の実装は多分誉められたものではないと思います。正規表現は大の苦手なので。使用する際はご注意ください(マルチバイト絡みの Validator は UTF-8 じゃないと動かないと思います)。あと、ご意見ご感想ご要望等ありましたら、なるだけ対応する所存です。ドキュメントは後日頑張ります(Smoochy のドキュメントも書いてないな…頑張ります)。
そうそう、名前の由来は細野晴臣のアルバムからでした。毎回思いますが、名前考えてるときが一番楽しいです。
*1:クラスだけ定義して未実装だった。後で実装します