モデルを更に考える (7/7)
作成:2010-02-18 21:34
更新:2010-11-19 10:57
更新:2010-11-19 10:57
■エラーメッセージを日本語化する
実際に試してみると、このバリデーション機能には問題もあることがわかります。その最大のものは「エラーメッセージが英語」だという点です。また、バリデーションの種類が少なすぎるのもちょっと問題ですね。
では、そのあたりを修正しましょう。下にリストを掲載しておきます。mydata.phpと、add.ctpの2つのファイルを、リストにしたがって修正してください。そして、addにアクセスをして動作を確認してみましょう。
今度は、エラーメッセージはちゃんと日本語で表示されるようになります。更に、目もの部分は、半角文字で最大100文字以内となり、それ以上書くとメッセージが表示されるようになります。
まず、先にビューの修正を見ておきましょう。ここでは、<?php echo $form->error("comment"); ?>という文が新たに追加されています。これは、フォームヘルパーのエラーメッセージを出力するものです。引数に、どの項目のエラーかを指定すれば、その項目に関するエラーが表示されます。error("comment")とすれば、"comment"のテキストエリアのエラーが表示されるわけです。
$form->inputでは、エラーメッセージまで自動で表示してくれるのですが、それ以外のメソッドではそこまでの機能はありません。そこで、$form->textareaのエラーメッセージはこのようにして表示されるようにしておく必要があるわけです。
さて、肝心のモデルの方をみましょう。ここでは、$validateの内容が更にバージョンアップしています。ここでは、
ここでは、"rule"と"message"という項目を用意しています。"rule"が使用するバリデーション名、"message"が表示するエラーメッセージというわけです。
また、"comment"のところでは、「"rule" => array("between",0,100)」というものがruleに設定されていますね。これは"between"というバリデーションを使っているのです。
では、そのあたりを修正しましょう。下にリストを掲載しておきます。mydata.phpと、add.ctpの2つのファイルを、リストにしたがって修正してください。そして、addにアクセスをして動作を確認してみましょう。
今度は、エラーメッセージはちゃんと日本語で表示されるようになります。更に、目もの部分は、半角文字で最大100文字以内となり、それ以上書くとメッセージが表示されるようになります。
まず、先にビューの修正を見ておきましょう。ここでは、<?php echo $form->error("comment"); ?>という文が新たに追加されています。これは、フォームヘルパーのエラーメッセージを出力するものです。引数に、どの項目のエラーかを指定すれば、その項目に関するエラーが表示されます。error("comment")とすれば、"comment"のテキストエリアのエラーが表示されるわけです。
$form->inputでは、エラーメッセージまで自動で表示してくれるのですが、それ以外のメソッドではそこまでの機能はありません。そこで、$form->textareaのエラーメッセージはこのようにして表示されるようにしておく必要があるわけです。
さて、肝心のモデルの方をみましょう。ここでは、$validateの内容が更にバージョンアップしています。ここでは、
$validate = array(こんな具合に、それぞれの項目に連想配列を設定するようになっています。こうすることで、バリデーションの内容をより具体的に記述できるのですね。
"項目" => array( 設定 => 値, 設定 => 値 ……),
"項目" => array( 設定 => 値, 設定 => 値 ……),
……略……
);
ここでは、"rule"と"message"という項目を用意しています。"rule"が使用するバリデーション名、"message"が表示するエラーメッセージというわけです。
また、"comment"のところでは、「"rule" => array("between",0,100)」というものがruleに設定されていますね。これは"between"というバリデーションを使っているのです。
"rule" => array("between", 最小文字数 , 最大文字数 )このように記述することで、指定した範囲内の文字数でないとOKしないようにできます。この"between"のように、バリデーション用の定数以外にも、実はたくさんのバリデーションがCakePHPには用意されているのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※Mydataモデルの修正 <?php class Mydata extends AppModel { public $name = "Mydata"; public $validate = array( "name" => array( "rule" => 'notEmpty', "message" => "名前は必ず記入してください。" ), "mail" => array( "rule" => 'mail', "message" => "メールアドレスではありません。" ), "comment" => array( "rule" => array("between",0,100), "message" => "メモは半角文字で100文字以内にしてください。" ) ); } ※add.ctpの修正 <h1>データの追加</h1> <?php echo $form->create("Mydata",array("type"=>"post","action"=>"./add")); ?> <?php echo $form->input("name"); ?> <?php echo $form->input("mail"); ?> <?php echo $form->input("tel"); ?> <?php echo $form->textarea("comment"); ?> <?php echo $form->error("comment"); ?> <?php echo $form->end("送信"); ?>
※関連コンテンツ
「初心者のためのCakePHP 1.3 プログラミング入門」に戻る