3.もう少しプログラムらしく
ここまで、きたら全体を見直して、プログラムっぽく動作させてみましょう。
3-1.Viewの見直し
3-1-1. index.ctp
先程、cssの説明の時に使用した「ビザのオーダーリスト」のViewです。
<li><?php echo $this->Form->input('№:',array('size'=>2)); ?></li>
は、編集、削除で指定するidを入力するエリアです。
3-1-2. add_order_list.ctp
データ追加用の画面です。言い忘れていましたが、画面の作成は「Form Helper」を使用しています。入力のタイプとして「select」と「radio」を作成してみました。
3-1-3. edit_order_list.ctp
データ更新用の画面です。データ追加の画面とほぼ同一です。実行時には修正前データが画面 表示されます。
3-1-4. delete_order_list.ctp
データ削除前の確認用画面です。一応表示専用にしてみました。
3-2.Controllerの見直し
最後にプログラム「OrderListsController.php」の見直しです。
このプログラムは、画面に対応する4つのfunctionで構成されています。
3-2-1. function index()
(1)まず入力ボタンがクリックされたかの確認をしています。
if ($this->request->is('post') || $this->request->is('put')) {
のように’post’と’put’の両方を聞くのが常とうのようです。
(2)index.ctpで各ボタンにつけた名前を順番に聞いていき、そのボタンにあった処理を実行します。
if(isset($this->request->data['list_add'])) {
(3)編集や削除のボタンをクリックされた場合、該等のidをセットしてリダイレクトします。
$list_number = $this->request->data[OrderList]['№:'];
$this->redirect('../OrderLists/DeleteOrderList/'.urlencode($list_number));
(4)ボタンがクリックされていなかった場合、初期設定を行い登録済みデータを画面に出力します。
ボタンクリックの判定をクリックされたときとするか、クリックされていなかったときとするかは、プロジェクト内で統一しておいた方が良いと思います。
3-2-2. function AddOrderList()
(1)入力内容をデータベースに保存後、インデックス画面にリダイレクトしています。インデックス画面で登録内容が確認できます。
$this->OrderList->save($this->request->data);
$this->redirect(array('action' => 'index'));
※このとき、意図的にボタンクリックの判定を’post’のみにしてみましたが、特に問題はありません でした。
3-2-3. function EditOrderList($id) と function DeleteOrderList($id)
(1)URLで渡された’№:’を’$id’で受け取ります。
$this->OrderList->id = $id;
(2)入力内容をデータベースに保存または削除後、インデックス画面にリダイレクトしています。インデックス画面で更新結果が確認できます。追加と更新は同じ構文となります。
$this->OrderList->save($this->request->data); ・・・更新
$this->OrderList->delete($this->request->data('OrderList.id')); ・・・削除
$this->redirect(array('action' => 'index'));
(3)ボタンがクリックされていなかった場合、idで指定されたデータを画面に表示します。
更新も削除も構文は同じです。
$this->request->data = $this->OrderList->read(null, $id);
下の枠をクリックするとソースを展開します
誤り等のご指摘がありましたら、何なりとコメントください。
よろしくお願いします。
【重要】 当プログラムは入力項目のチェックをしておりませんので、悪意あるスクリプトなどを入力されると何が起きるかわかりません。公開を考えている方は、「Sanitize」等を使用して不正なデータを取り込まないようにしてください。
(2/3)へ
0 件のコメント:
コメントを投稿