日記のコメントを残せるようにする(CakePHP修行 #44)
August 10, 2007 2:11 PM written by Gen Taguchi
さて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の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で作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。
Info: CakePHP修行! |
固定リンク |
コメント (0) |
トラックバック (0) |
↑


