altere5's blog

I thought what I'd do was, I'd pretend I was one of those deaf-mutes. ( or shou'd i ? )

CakePHPのお勉強 2回目 お問い合わせ内容の保存

前回に引き続き「お問い合わせ」のサンプルを使って勉強する。

前回のサンプルではただ入力を受け取り表示を行っているのみの為、そもそも何のお問い合わせが行われたわからない。
そこで今回は、入力された内容をデータベースに保存する事にする。

(1) モデルの作成

今回はデータベースに接続する必要があるのでそれに対応したモデルを作成する。

<?php

class Contact extends AppModel{

}
  

今回は特に特別な処理は実装しないので空のままで進む。

「Contact.php」は「Model」フォルダの中に配置。

(2) 保存先テーブルの作成

今回は問い合わせ内容をデータベースに保存するので保存先のテーブルを作成。

CREATE TABLE IF NOT EXISTS `contacts` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `username` varchar(255) NOT NULL,
    `email` varchar(255) NOT NULL,
    `comment` text NOT NULL,
    `created` datetime DEFAULT NULL,
    `modified` datetime DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

「created」と「modified」を作成しておくと自動的に作成日時や更新日時がセットされるので便利。

(3) コントローラの修正

ここまででデータベースを利用する準備が整ったのでコントローラ側を修正。

<?php

class ContactsController extends AppController {

    // indexアクション
    public function index() {}

    // thanksアクション
    public function thanks() {

        if($this->request->is('post')) {

            $this->Contact->create();
            $this->Contact->save($this->request->data);

            //POSTデータを受け取った場合の処理を記述
            $this->set('username', $this->request->data['username']);

        } else {

            $this->redirect('index');

        }

    }

}
 

13行目と14行目にデータを保存する処理を追加。
「create」メソッドでモデルの状態をリセットし「save」メソッドで実際にデータの保存を実行。

(4) 確認

実際に動作を確認。
前回同様に入力フォームで適当に入力し「送信ボタン」を押す。

f:id:altere5:20131116173952p:plain

下の方のデバッグ情報を見ると分かるように入力内容がINSERT文となり処理されている。

f:id:altere5:20131116174542p:plain

データベースの中を確認しても正常に登録されている事が確認できる。