入力チェック

フォームでの入力値の変換までできましたが、入力チェックをしなくては、
フォームの意味がありません。入力チェックを作ってみましょう。


今使っているフォームとは、別のチェック用のアクションを用意します。
同じアクションで行うと、最初にアクセスした時に、入力チェックがかかってしまうので、
入力チェックは別のアクションでおこないます。

アクションの作成

webapp/modules/test/form/check/Check.class.php に作成します。

<?php
class Test_Form_Check {
    var $name;
    var $email;
    
    function execute() {
        return 'success';
    }
}
?>

Test_Formアクションから、クラス名だけを変更しています。

maple.iniを作成します。

webapp/modules/test/form/check/maple.ini に作成します。

[Convert]
name.trim =
email.trim =
email.toHalf =

[Validate]
name.required = "1,名前を入力してください"
email.mail = "0,メールアドレスを正しく入力してください"

[View]
success = "test/form/result.html"
input = "test/form.html"

Varidateセクションに、チェック内容を記述します。
パラメータ名.チェック内容でキーを記述します。
値は、ストッパー.エラー文字列.引数を記述します。
ストッパーが1であり、その時点でエラーがあれば、その項目のそれ以下のチェックはおこないません。
ストッパーが0であれば、続けて他のチェックもおこないます。

name.required = "1,名前を入力してください"
name.maxlength = "0,名前は10バイト以内で入力してください,10"

上記の場合、requiredでエラーがあれば、maxlengthのチェックはおこないません。
requiredのストッパーが0であれば、両方ともチェックをおこないます。


Varidaterの種類は、下記URLを見てください。
http://kunit.jp/maple/wiki/index.php?reference%2Fjp#p8dd4622


Viewセクションには、input返却時のテンプレートを関連付けます。
入力チェックのエラー時は、アクションは実行されずに、フレームワークより、inputが返却されるので、
inputにテンプレートを関連付けておきます。

完了画面を作成します

webapp/templates/test/form/result.html に作成します。

<html>
<body>
form test success
Name:{$action.name}<br>
Email:{$action.email}<br>
</body>
</html>

入力画面に、エラーメッセージを表示させるために、入力画面を変更します。
webapp/templates/test/form/form.html を変更します。

<html>
<body>
form test
{errorList->getMessages assign="messages"}
{foreach from=$messages item=message}
<font color="#ff0000">{$message}</font><br>
{/foreach}
<form method="post">
Name:<input type="name" name="name" value="{$action.name}"><br>
Email:<input type="name" name="email" value="{$action.email}"><br>
<input type="submit" name="dispatch_test_form_check" value="Submit">
</form>
<hr>
Name:{$action.name}<br>
Email:{$action.email}<br>
</body>
</html>

すべてのエラーメッセージは、errorList->getMessagesより取り出すことができますので、
messages変数にassignし、messages変数より出力します。


ここまでで、設定はすべて完了です。動作を確認してみましょう。


実際に使う場合は、Test_Form_Checkクラスのexecute()メソッドに、データベースへの登録処理であるとか、
メールの送信処理を記述します。


さて、フォームを作ってみた感想はどうでしょうか?
今までの方法に比べて簡単になりました?