cakePHPでは、bakeしただけで一覧表示、追加、修正、削除の機能がすべて自動生成される。しかし追加、修正、削除の各機能では、確認画面は表示されない(同じようなことをバージョン1.1でも書いた)。バージョン1.1のときは仕方ないので自前で確認画面を実装した。もちろんその時点で、cakePHPの確認画面処理を紹介した記事があったのだが、そのときは何を自分でこだわっていたのか忘れたが自前実装したのだった(その記述はこちらを参照)。
今回は自前実装なんてばかばかしい、と思って上記のサイトをそのまま使おうと思っていたのだが・・・ところがどっこいバージョン1.2では使えなかった。いろいろ仕様が変わっているようだ。
仕方がないので、やっぱり自前で実装した。一応今回は上記の記事を参考にしつつ、なるべくcakePHPらしい記述でやることにして、以下のような内容になった(コントローラを修正)。
–[変更前]———————————————————-
function add() {
if (!empty($this->data)) {
$this->Site->create();
if ($this->Site->save($this->data)) {
$this->Session->setFlash(__(‘The Site has been saved’, true));
$this->redirect(array(‘action’=>’index’));
} else {
$this->Session->setFlash(__(‘The Site could not be saved. Please, try again.’, true));
}
}
$users = $this->Site->User->find(‘list’);
$this->set(compact(‘users’));
}
–[変更後]———————————————————-
function add() {
if (!empty($this->data)) {
$this->Site->create();
$btnConfirm=(isset($this->data[‘btnConfirm’])? 1:0);
if($btnConfirm){
$this->Site->set($this->data);
if (!$this->Site->validates()) {
$this->Session->setFlash(__(‘The Site could not be confirmed. Please, try again.’, true));
}else{
$this->Session->setFlash(__(‘The Site has been confirmed’, true));
//$this->redirect(array(‘action’=>’index’));
$this->render(“confirm”);
}
}else{
if (!$this->Site->save($this->data)) {
$this->Session->setFlash(__(‘The Site could not be saved. Please, try again.’, true));
} else {
$this->Session->setFlash(__(‘The Site has been saved’, true));
$this->redirect(array(‘action’=>’index’));
}
}
}
$users = $this->Site->User->find(‘list’);
$this->set(compact(‘users’));
}
なおテンプレートも修正の必要がある。やったことは以下の点。
(1) add.ctpのsubmitボタンのname属性を「data[btnConfirm]」とした
(2) 確認画面用のテンプレート「confirm.tpl」を作成した
まだ全部作りきっていないのだが、formヘルパーを使って、以下のものを組み合わせればよい。
・$form->label()
・$form->text()
・その他のtypeはそれに準じて・・・。
この作業にあたっての注意事項はモデルクラス内のvalidates()メソッドだろう。バージョン1.2は1.1のときと使い方が違うので注意が必要だ。ついでに言うと、モデル内のバリデーションの記述方法にも注意が必要だ(おそらく正式バージョンリリース時までに修正されるだろう)。
細かい記述方法は後日取りまとめてからということで。