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

LiveValidationPHPを使ってみた。

タグ [  Tech  JavaScript  PHP  ]
こんにちは、連休ですっかり休みボケの亀本です。

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

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

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

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

  1. livevalidationphp.class.php
  2. livevalidation/livevalidation.js
  3. livevalidation/livevalidation.css

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

validationTest.php:
  1. <?php
  2. require_once "livevalidationphp.class.php";
  3. require_once "rule.php";
  4.  
  5. $formTestLive = new LiveValidationMassValidatePHP("formTest", $_POST);
  6. $formTestLive->addRules($formRules["formTest"]);
  7.  
  8. $html = $formTestLive->generateAll();
  9.  
  10. $formTestErrors = array();
  11.  
  12. if (isset($_POST["action"]) && $_POST["action"] == "send_test_form") {
  13.   $formTestErrors = $formTestLive->validate();
  14. }
  15. ?>
  16. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  17.  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  18. <html>
  19. <head>
  20.   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  21.   <meta http-equiv="Content-Script-Type" content="text/javascript" />
  22.   <meta http-equiv="Content-Style-Type" content="text/css" />
  23.   <title>LiveValidationPHP サンプル</title>
  24.   <link href="livevalidation/livevalidation.css" rel="stylesheet" type="text/css" />
  25.   <script type="text/javascript" src="livevalidation/livevalidation.js"></script>
  26.   <script type="text/javascript"><!--
  27. window.onload = function() {
  28. <?php print $html; ?>
  29. }
  30.   //-->
  31.   </script>
  32. </head>
  33. <body>
  34.   <h1>LiveValidationPHP サンプル</h1>
  35. <?php
  36. if (count($formTestErrors)) {
  37.   foreach ($formTestErrors as $errorMessage) {
  38.     print "<p>Error=> $errorMessage </p>\n";
  39.   }
  40. }
  41. ?>
  42.   <form name="formTest" id="formTest" action="validationTest.php" method="post">
  43.   <p>「あいうえお」と入力してください。: <input type="text" name="aiueo" id="aiueo" value="" /></p>
  44.   <p>メールアドレスを入力してください。: <input type="text" name="email" id="email" value="" /></p>
  45.   <p><input type="hidden" name="action" value="send_test_form" /></p>
  46.   <p><input type="submit" value=" 登録 " /></p>
  47.   </form>
  48.  
  49. </body>
  50. </html>

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

rule.php:
  1. <?php
  2. $formRules["formTest"] = array(
  3.   "aiueo" => array(
  4.     "args" => array("validMessage" => "あいうえおって言えたね"),
  5.     "rules" => array(
  6.       array(
  7.         "method" => "Validate.Presence",
  8.         "args" => array("failureMessage" => "からっぽ")
  9.       ),
  10.       array(
  11.         "method" => "Validate.Format",
  12.         "args" => array("pattern" => "/^あいうえお$/i", "failureMessage" => "入力値が違います")
  13.       )
  14.     )
  15.   ),
  16.   "email" => array(
  17.     "args" => array("validMessage" => "だいたい正しいEmailアドレスですね"),
  18.     "display" => "Email",
  19.     "rules" => array(
  20.       array(
  21.         "method" => "Validate.Presence",
  22.         "args" => array()
  23.       ),
  24.       array(
  25.         "method" => "Validate.Email",
  26.         "args" => array()
  27.       )
  28.     )
  29.   )
  30. )
  31. ?>

これで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等と組み合わせてYAMLやJSONで記述するようにしてやれば、扱いやすくなると思います。

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

コメントフォーム

認証
captcha_key
 

トラックバック