cakePHPでAjaxとJSONを利用したWebサイトを作る時のチップスまとめ

A0002 001091

こんばんは、ボーノです。

今まであんまりフレームワークを使ったことなかったんだけど、今後も高速開発とか身に付けたいので本格的に使ってみることに。

これを見れば次からは同じことで調べなくなるように、備忘録且つまとめとして取っておく。

  • CSS:Bootstrap使用
  • フレームワーク:cakePHP使用
  • データベース:MySQL使用
  • 開発:vim使用
  • サーバー:localhostからのAWS
  • API:Google Maps API使用
  • データ受取:JSON

Bootstrapは指定フォルダに入れる

下記の、手動でimg, js, cssフォルダにファイルを入れる方法をとった。
Pluginフォルダに入れるだけなので簡単。

CakePHPのデザインをTwitter Bootstrapに変更する作業のメモ | asklife

Controllerでの備忘録

class内で使用するデータベースを用意する。

public $name = "Main"; //使用するコントローラの名前を宣言
public $uses = array('Question', 'Answer', 'User'); //使用するデータベースを指定
public $autoLayout = false; //指定しないとdefault.ctpが適用される
public $autoRender = true; //trueにしないとレンダリングしてくれない
public $helpers = array('Js' => array('Jquery')); //ヘルパーを指定
public $components = array('RequestHandler'); //Ajaxを使う時に必要みたい

JSON形式でデータをやり取りする場合に必要みたい。

public function beforeFilter(){
    if($this->RequestHandler->isAjax()){
        if($this->action =='getAjaxAnswer'){
            Configure::write('debug', 0);
            $this->RequestHandler->setContent('json');
            $this->RequestHandler->respondAs('application/json; charset=UTF-8');
        }
    }
}

ビューに値を渡す方法。$this->set()を使う。
Questionはデータベースの名前。find(‘all’)は全てのカラムから取得。

条件指定をする時は、find(‘all’, array(‘conditions’=> hoge))という書き方をする。

public function hoge() {
    Configure::write('debug', 0); //デバッグを無効に。有効にする時は1
    $dataOfQuestion = $this->Question->find('all');
    $this->set('dataOfQuestion', $dataOfQuestion);
}

データの保存する時は$this->save()を使う。
なお、時間を入れたい時はdate(‘Y-m-d H:i:s’)等でよい。

public function addRecord() {
        $this->Question->data['Question']['created_at'] = date('Y-m-d H:i:s');
        $this->Question->data['Question']['place_lat'] = const;
        $this->Question->save($this->data);
}

JSON形式でビューにデータを渡す時は下記方法で。json_encodeを使う。

    return new CakeResponse(array('body' => json_encode(array(
        'content'=> $dataOfQuestion[$dataNumber]['Question']['content'],
        'level'=> $dataOfQuestion[$dataNumber]['Question']['level'],
        'qid'=> $dataOfQuestion[$dataNumber]['Question']['qid']
    ))));

データベースからある条件のデータを取得する時

    $selectedQuestion = $this->Question->find('all', array(
        'conditions'=> array('Question.qid' => $qid)));

その他

ビューとかデータベースとか全体的なところはまた次回で。