日記のコメントを残せるようにする(CakePHP修行 #44)

SPONSORED LINK

Pocket

さてCakePHP修行。だいぶ終盤に近づいてきました。今回は日記にコメントを残す機能を作りこんでいきます。

■ モデルやらをいろいろ作る

日記のコメントは当初予定していなかったのでSQLから作り始めます。

まずはSQL。

CREATE TABLE comments (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    post_id INT UNSIGNED,
    user_id INT UNSIGNED,
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL,
    KEY post_id_created (post_id, created)
);

これにあわせてAssociationを設定します。UserとPostに対してhasManyの関係を記述します。またCommentモデル&コントローラーも作成します。

■ コメントの一覧

コメントはそれぞれの日記に対してつくので、posts_controller.phpのdetail()に記述します。えーと、コードは次の一行足しただけですね・・・フレームワークの威力発揮です。簡単すぎる・・・。

$this->set('comments', $this->Comment->findAll(array('Comment.post_id'=>$post['Post']['id']),null,'Comment.created DESC'));

ちなみに画面はこんな感じ。

comment.gif

↑ 日記の内容に対してコメントの一覧。自分のものに関しては削除できます。また新規追加もここから可能。

■ コメントの追加、削除

コメントの追加、削除に関しても基本的にはこの画面でできるので、CommentのViewは作っていません。作ったのはコントローラーの次の記述だけ。

function add($id) {
  $this->_checkLogin();
  $me = $this->User->findById_hash($_COOKIE['my_id']);
  $this->set('me', $me);
  if (!empty($this->data)) {
    $this->data['Comment']['id'] = null;
    $this->data['Comment']['post_id'] = $id;
    $this->data['Comment']['user_id'] = $me['User']['id'];
    $this->Comment->save($this->data);
    $this->Session->write('sys_msg', 'Your comment has been added.');
  }
  $this->redirect('/posts/detail/'.$id);
}
function del($id) {
  $this->_checkLogin();
  $me = $this->User->findById_hash($_COOKIE['my_id']);
  $comment = $this->Comment->findById($id);
  $post = $this->Post->findById($comment['Comment']['post_id']);
  $this->set('me', $me);
  $this->Comment->del($id);
  $this->Session->write('sys_msg', 'Your comment has been deleted.');
  $this->redirect('/posts/detail/'.$post['Post']['id']);
}

超簡単・・・20分ぐらいだったのでは。

これでコメントの追加、削除ができるようになりました。なお、編集は面倒なので省きました。削除して追加する方向でw。こういう機能の追加がやたら簡単ですね。フレームワーク。なめてました。

さてこんなところですかね。アプリとしてはまだまだ甘いところがありますが(エラー処理とか、権限処理とか)、修行としてはいったんここで終了ということにしましょう。あとは最後に今回学んだことをまとめて終わりにします。

挫折する気まんまんでしたが、無事に終わってしまいそうですな・・・。

※ CakePHP修業は百式管理人がSNSっぽいものをCakePHPで作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。

ツイッターもやっています!

SPONSORED LINK

  1. No comments yet.

  1. No trackbacks yet.