モデルを更に考える (6/7)
作成:2010-02-18 21:17
更新:2010-05-10 20:11
更新:2010-05-10 20:11
■addアクションをバリデーション対応にする
では、バリデーションを追加したモデルに、データを追加する「add」アクションを作ってみましょう。MydatasControllerクラスの「add」メソッドを、下に掲載したリストのように書き換えてください。ビュー(add.ctp)は、今回は修正する必要はありません。
http://localhost/cakesample/mydatas/addにアクセスし、フォームに何も書かないで送信すると、NameとMailの項目の下に「This field cannot be left blank」とエラーメッセージが表示されます。
ここでは、addでif (!empty($this->data))をチェックし、trueならば$this->Mydata->save($this->data);で保存をする、という処理をしているだけです。ただし、その後のリダイレクトが以下のように修正されていますね。
「だけど、その前に$this->Mydata->saveしちゃったら、問題のあるデータも保存されてしまうんじゃ?」と思った人。いいえ! モデルは、バリデーションが設定されていると、「save」を実行する前に自動的にバリデーションのチェックを行い、エラーがない場合しかデータは保存されなくなるのです。エラーがあれば、saveを実行してもデータは絶対に保存されません。
このバリデーション機能は、使えるようになると実に強力です。値をチェックするような処理を自分でまったく書く必要がないのですから。
http://localhost/cakesample/mydatas/addにアクセスし、フォームに何も書かないで送信すると、NameとMailの項目の下に「This field cannot be left blank」とエラーメッセージが表示されます。
ここでは、addでif (!empty($this->data))をチェックし、trueならば$this->Mydata->save($this->data);で保存をする、という処理をしているだけです。ただし、その後のリダイレクトが以下のように修正されていますね。
if ($this->Mydata->validates()){$this->Mydata->validates()というのは、バリデーションを実行した結果を取得するためのものです。これがtrueならば、バリデーションでエラーが発生しなかったということなので、トップに戻ります。そうでない場合は、もう一度このページを表示し、再度投稿してもらうようになるわけです。
$this->redirect(".");
}
「だけど、その前に$this->Mydata->saveしちゃったら、問題のあるデータも保存されてしまうんじゃ?」と思った人。いいえ! モデルは、バリデーションが設定されていると、「save」を実行する前に自動的にバリデーションのチェックを行い、エラーがない場合しかデータは保存されなくなるのです。エラーがあれば、saveを実行してもデータは絶対に保存されません。
このバリデーション機能は、使えるようになると実に強力です。値をチェックするような処理を自分でまったく書く必要がないのですから。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※addメソッドの修正 function add(){ $this->set("page_title","Sample Add Page"); $this->set("content_header","Sample Add Page."); $this->set("content_footer","copyright SYODA-Tuyano. 2010."); if (!empty($this->data)){ $this->Mydata->save($this->data); if ($this->Mydata->validates()){ $this->redirect("."); } } }
※関連コンテンツ
「初心者のためのCakePHP 1.3 プログラミング入門」に戻る