アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

LiveValidationPHPを使ってみた。

こんにちは、連休ですっかり休みボケの亀本です。

先日「LiveValidationPHP」というライブラリがはてブに上がっていたので、面白そうだなーと思ってちょっと試してみました。

このLiveValidationPHPは、「LiveValidation」というJavaScriptのライブバリデーションライブラリをラッピングしたPHPのバリデーションライブラリです。
これを用いると、JavaScriptを(ほぼ)全く用いずに、PHPを記述するだけでライブバリデーションとサーバサイドのバリデーションをまとめて実装することができます。

インストール方法は、ダウンロードして展開するだけです。
ダウンロードページはこちら:
http://livevalidationphp.leihitu.nl/index.php?page=downloads
JSライブラリのlivevalidation.jsと、livevalidation.jsから使用されるサンプルCSSも同梱されています。

展開したライブラリの中から



livevalidationphp.class.php
livevalidation/livevalidation.js
livevalidation/livevalidation.css


をコピーして、同階層に以下のようなサンプルスクリプトを作成します。

validationTest.php:


<?php
require_once "livevalidationphp.class.php";
require_once "rule.php";

$formTestLive = new LiveValidationMassValidatePHP("formTest", $_POST);
$formTestLive->addRules($formRules["formTest"]);

$html = $formTestLive->generateAll();

$formTestErrors = array();

if (isset($_POST["action"])  & & $_POST["action"] == "send_test_form") {
  $formTestErrors = $formTestLive->validate();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <title>LiveValidationPHP サンプル</title>
  <link href="livevalidation/livevalidation.css" rel="stylesheet" type="text/css" />
  <script type="text/javascript" src="livevalidation/livevalidation.js"></script>
  <script type="text/javascript"><!--
window.onload = function() {
<?php print $html; ?>
}
  //-->
  </script>
</head>
<body>
  <h1>LiveValidationPHP サンプル</h1>
<?php
if (count($formTestErrors)) {
  foreach ($formTestErrors as $errorMessage) {
    print "<p>Error=> $errorMessage </p>\n";
  }
}
?>
  <form name="formTest" id="formTest" action="validationTest.php" method="post">
  <p>「あいうえお」と入力してください。: <input type="text" name="aiueo" id="aiueo" value="" /></p>
  <p>メールアドレスを入力してください。: <input type="text" name="email" id="email" value="" /></p>
  <p><input type="hidden" name="action" value="send_test_form" /></p>
  <p><input type="submit" value=" 登録 " /></p>
  </form>

</body>
</html>


ここで、最初にインクルードしているrule.phpは下記に掲載したバリデーション条件を記述したファイルです。
内部で使用している$formRules変数は、このrule.phpで定義されたものです。

rule.php:


<?php
$formRules["formTest"] = array(
  "aiueo" => array(
    "args" => array("validMessage" => "あいうえおって言えたね"),
    "rules" => array(
      array(
        "method" => "Validate.Presence",
        "args" => array("failureMessage" => "からっぽ")
      ),
      array(
        "method" => "Validate.Format",
        "args" => array("pattern" => "/^あいうえお$/i", "failureMessage" => "入力値が違います")
      )
    )
  ),
  "email" => array(
    "args" => array("validMessage" => "だいたい正しいEmailアドレスですね"),
    "display" => "Email",
    "rules" => array(
      array(
        "method" => "Validate.Presence",
        "args" => array()
      ),
      array(
        "method" => "Validate.Email",
        "args" => array()
      )
    )
  )
)
?>


これでvalidationTest.phpにアクセスすると、以下の図のようなバリデーションが実装されます。



rule.phpで定義されているバリデーションルールは、$formRules["formTest"]内で、
・第1階層にフォーム名
・第2階層に、validになる条件とvalid時のメッセージなどの引数
・rulesが設定された場合、第3階層にバリデーションメソッドとエラーメッセージや条件など
となります。

バリデーションメソッドに指定できるのは、livevalidation.jsで用意されているバリデーションクラスと同じものですので、詳細はそちらをご覧ください。


実際に使ってみると、ほぼ何も書いていないのに、ぱぱっとライブバリデーションが実装でき、結構いい感じです。
必要なのは最初のインスタンス生成などの、ちょっとした定型処理の記述だけです。
# 言い添えておくと、このサンプルソース自体は付属のexampleと大差ありません。
# これはパクろうと思ったわけではなくて(^^;)これ以上ロジック側に実装する必要がなかった、というのが実際のところです。
JavaScriptに至っては、window.onloadしか書いていません。これも、付属サンプルのようにタグをHTMLのbody下部に記述すれば、まさにJavaScriptを一切記述する必要がありません。

また、JavaScriptがOFFの状態でも、きちんとサーバサイドでのバリデーションが実装されているのでとても便利です。
単純にサーバサイドのバリデーションライブラリとして見ても、最低限必要な機能はちゃんと実装されているように感じました。
なにより、JSとPHPで同じ条件のバリデーションを2度書かなくてよいサクサク感がうれしいですね。
arrayを書きつづるルールは見づらいですが、構造は単純なのでspyc等と組み合わせてYAMLJSONで記述するようにしてやれば、扱いやすくなると思います。

使いやすい軽量ライブラリなので、ちょっとした時に非常に便利そうですね。