例えば:
1)入力フォーム:<input name="name" >
2)入力フォームから受ける.php: $name = $_POST['name'];
そして、3)サニタイズ+4)(データの加工)+5)データの検証+6)データベースへ、という形になります。
問題として、
★1)の名前がどんなものでもよい。ルール(規則)が何もない。⇒ページごとに、または開発者ごとに名前の付け方がばらばらになる可能性がある。
★5)で失敗した場合にどうやって1)まで戻すか〔他の正しいデータフィールドをどうするか〕という問題が生じる。
などが往々にして生じます。これまではみんなそれで苦労しました。ところが、CakePHP には、そのあたりを解決する手法が組み込まれています。
★基本となるのは、
--------------------------------------------------------------
・フォームからのデータは、名前を“data['テーブル名']['フィールド名']”として送信すると、自動的に変数$dataに格納してくれる。
・Model の save メソッドは、$変数名['テーブル名']['フィールド名'] = "値"というデータを一括格納できる。
--------------------------------------------------------------
というルールです。
例えば、users テーブルの中に、name フィールドがあるとします。入力フォーム(ビュー)の中に、
--------------------------------------------------------------
echo $html->input('User/name', array('id' => 'user_name', 'size' => '40', 'value' => $users['User']['name'], ))
--------------------------------------------------------------
と書いておくと、実際の HTML には、
--------------------------------------------------------------
<input name="data[User][name]" id="user_name" size="40" value="" type="text" />
--------------------------------------------------------------
と展開されます。
ここにデータが入ってきた場合、コントローラ側では、
empty($this->User) …… データが入力されていなければ True.
という関数でデータが入ってきたかどうかを調べ、もしデータが入力されているようであれば、
$this->User->save($this->data['User'])
という一文で、“usersテーブルへの1行分のデータをすべて”、保存することができます。これを理解していると、保存前にデータを加工したり、独自のデータを計算・追加することなども可能になります。
さて、データバリデーションはどういう仕組みになっているんでしょうか……。このあたりもかなり考え抜かれています。次回へ続く。