入力チェック
フォームでの入力値の変換までできましたが、入力チェックをしなくては、
フォームの意味がありません。入力チェックを作ってみましょう。
今使っているフォームとは、別のチェック用のアクションを用意します。
同じアクションで行うと、最初にアクセスした時に、入力チェックがかかってしまうので、
入力チェックは別のアクションでおこないます。
アクションの作成
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()メソッドに、データベースへの登録処理であるとか、
メールの送信処理を記述します。
さて、フォームを作ってみた感想はどうでしょうか?
今までの方法に比べて簡単になりました?