localdisk

PHP とか Java とか Web とか好きなことを書きます。

Simple Validation Framework Haraiso

ここのところ、夜なべして作っていたのがようやく形になったので公開します。

コメントアノテーションで Validation を行います。使い方はとても簡単。

  1. localdisk / Haraiso / Downloads — Bitbucketより Zip ファイルをダウンロードして解凍
  2. 解凍してできた Haraiso ディレクトリを include_path に含める
  3. あとはこんなこんな感じに書く
<?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();
  1. Haraiso.php を require_once
  2. $name フィールドのコメントに @Required と @Alpha アノテーションを定義
  3. 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:クラスだけ定義して未実装だった。後で実装します