どうせバリデーション内容を指定するなら、ブラウザでチェックするコードも生成できないかと思い、作成したクラスです。
HTML5のバリデーションは、未だ未対応ブラウザ使用している方も多いです。当サイトは一応技術系ですので、少ないですよ。(けど、5%もいます。)
またHTML5に追加されたバリデーションは満足するだけの種類がありません。Javascriptで新しいバリデーション追加するなら、既存のライブラリー使ったほうが、実績もありますし、安心です。
そこで、既存のJavascriptバリデーションライブラリーを利用し、FuelPHPで行う項目に対するバリデーションの設定を利用し、ブラウザで行うバリデーションの設定を生成するクラスを作ることにしました。
私は多国語化を意識しています。ですから、出来るなら他国語対応が可能な(メッセージなどが翻訳された)ライブラリーが嬉しい訳です。
Javascriptのバリデーションプログラムは、スクリプトを記述し指定するタイプと、フォーム中の要素にclassなどの属性を利用して、バリデーション内容を指定するもの2つが多いようです。
FuelPHPで生成する場合、どちらでも手間は変わりません。
当初考えていたのはexValidationのメッセージだけ英語に翻訳して、使用しようかと思いましたが、バリデーションの種類がそれほど豊富でないため、予め多国語のメッセージが揃っているJQuery inline form validatorを採用することにしました。(この2つはともにclassにバリデーションを指定するタイプであり、最初は両方共に対応させる予定でしたので、設定ファイルを作成するだけで、コードいじらなくてもexValidationに対応できるかも知れません。)
valivali.phpとvalivalidation.phpをapp/controller下においてください。
valivali.php が本体のクラスです。Validationクラスを継承しています。(FuelPHPマニュアルにはコアを置き換えることも出来るとありますが、だからと 言ってむやみに置き換えるのは避けましょう。「コアを置き換える」のは何かクールで素晴らしいように感じる気持ちはわかります。たとえば、既に大量のコー ドが存在し、それ全部に修正が必要な場合、コアを置き換えるのも一手でしょう。しかし、FulePHPは比較的新しいフレームワークですから、手持ちの コードはそんなに多くないはずです。そうであれば、継承して別名の新しいクラスを作りそれを利用する、通常の方法で対処しましょう。コードを読む人が理解 しやすいです。そして、時間が経てば作った本人も忘れてしまうものです。プログラム数十年の歴史の中で、数知れず繰り返されてきた悲劇を再び自らの手で起 こす必要はないでしょう。)(更に、コンピューター上の情報を利用する読み手としても、コアを別のものと置き換えていることが、関連する全ページに記述さ れていないと、無駄に頭を悩ませる事になってしまいます。お願いですから、どうしても拡張したい方は、読者のためその旨を明記し続けてください。読者が、 前の記事を読み、コアを置き換えているのを見つけてくれるだろうとは思わないでください。)
付け加えているのは、わずかなステップです。メソッドとしてはget_classesしかありません。
valivalidation.php はJQuery inline form validatorのバリデーションの種類で、FuelPHPに該当するものが存在しないものを、独自バリデーションとして付け加えたものです。実体は、 trueをリターンしているだけです。これがないと、noticeが連発されてしまうので、用意しました。
単純にtrueを返すだけでなく、必要な方はきちんとコード入れましょう。
バリデーションするコントローラーの中で、Validationクラスの代わりに、Valivaliクラスを使用します。
$val = Valivali::forge();
$val->add_callable('valivalidation');
$val->add('username', 'ユーザー名')
->add_rule('required')
->add_rule('min_length', 3)
->add_rule('onlyLetterNumber');
if ($val->run()) {....}
$view = View::forge('sample');
$view->val = $val->get_classes(); // 入力項目につけるclassのオプション
return $view;
ビューでは、入力項目のclassに生成されたバリデーションオプションを付け、出力します。
<link rel="stylesheet" type="text/css" media="all" href="/validationEngine.jquery.css" />
<script type="text/javascript" src="/jquery.js"></script>
<script type="text/javascript" src="/jquery.validationEngine.js" charset="utf-8"></script>
<script type="text/javascript" src="/jquery.validationEngine-ja.js" charset="utf-8"></script>
<script>
jQuery(document).ready(function(){
// binds form submission and fields to the validation engine
jQuery("#formID").validationEngine();
});
</script>
<?php echo Form::input('username',
Input::post('username', false) ? : '', array('class' => $val['username'])); ?><br />
追加方法についてはFuelPHP、JQuery inline form validatorのドキュメントをお読みください。
Valivaliクラスはコンフィグファイルの内容を元に生成しております。
バリデーション名をキー、JQuery inline form validatorのバリデーションコードを値として、対応させます。生成コード中の:arg1、:arg2、:arg3…がadd_rule()で指定された、引数に対応します。
公開はGithubで行なっています。簡単なコードですので、バグがあっても自分で直されたほうが速いでしょう。 :D
| Elefant CMS もうすぐ1.2< 前 | 次 >FuelPHP、MVCと自動生成とテンプレートと |
|---|
| < 前 | 次 > |
|---|