こんにちは、連休ですっかり休みボケの亀本です。
先日「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等と組み合わせてYAMLやJSONで記述するようにしてやれば、扱いやすくなると思います。
使いやすい軽量ライブラリなので、ちょっとした時に非常に便利そうですね。