SNSっぽい友達系の処理をつくりはじめてみる(CakePHP修行 #38)
August 2, 2007 3:32 AM written by Gen Taguchi
さてCakePHP。なんだかいろいろやりました。中途半端なところではありますが、とにかく途中経過報告。
これ書いたら寝ようかな・・・。
■ DEBUGは2に設定
青い人のおすすめに従い、開発中はDEBUGレベルを2にしてみました(/config/core.php)。これをやるとどういう動作が起きているかのSQL文を画面の下に出してくれます。なんと便利!いままで何でやらなかったのだろう。

↑ こういった感じでSQLの動きがわかります。
■ 友達系の処理
さていよいよSNSっぽい処理を作っていきます。まずは自分の友達一覧画面。以下のような感じになるように作ります。

↑ イメージはこんな感じっすかね。というか、もう動いているけど。
■ 友達を招待する
友達を招待画面は以下のとおり。メールアドレスとコメントを入れれば招待メールを出してくれます。

↑ メールアドレスのみ必須ということで。
で、コードですが、ちょっとはまりましたが、完成系はこちら。getLastInsertID()の使い方がわからなかったのですが、データの挿入は$this->User->save()を使えばよいとわかってから理解しました(最初、$this->User->execute()使っていた・・・)。
あと気をつけるべきは、データ挿入時はidをnullにしてあげる点ですかね。これをやらないとあとでいろいろ大変らしいです(青い人談)。
function invite() {
// check login
$this->_checkLogin();
// sys message
$this->set('sys_msg', $this->Session->read('sys_msg'));
$this->Session->delete('sys_msg');
// get "my info"
$me = $this->User->findById_hash($_COOKIE['my_id']);
$this->set('me', $me);
$this->pageTitle = 'Invite a new friend';
// from start
$this->set('error', false);
if (!empty($this->data)) {
if (!empty($this->data['User']['email'])) {
// add user and update hash
$this->User->id = null;
$this->User->save($this->data['User']);
$new_id = $this->User->getLastInsertID();
$new_user['User']['id'] = $new_id;
$new_user['User']['id_hash'] = sha1(SHA1_KEY.$new_id);
$this->User->save($new_user['User']);
// add friend relationship
$this->Friend->id = null;
$this->data['Friend']['user_id'] = $me['User']['id'];
$this->data['Friend']['friend_user_id'] = $new_id;
$this->data['Friend']['status'] = 0;
$this->Friend->save($this->data['Friend']);
// send invites
$inviter = $me['User']['name'];
$join_link = WWW_URL.DS."users".DS."accept".DS.sha1(SHA1_KEY.$new_id);
$mail_file = VIEWS . 'mail/friend_invite.php';
$msg = implode (file($mail_file));
eval ("\$msg = \"$msg\";");
$toName = $this->data['User']['email'];
$subject = "[code*code] Invitation from ... ".$me['User']['name'];
// mb_send_mail ($toName, $subject, $msg, "From: ".ADMIN_EMAIL);
// write msg, jump
$this->Session->write('sys_msg', 'Invitaion mail has been sent.');
$this->redirect('/friends/');
} else {
$this->set('error', true);
}
}
}
あとエラー処理を全然していないとかいろいろつっこみどころはありますが、それは全体が出来たところでつぶしていきます。今は勢いが重要なのですよ!
さてちょっと長くなったので次エントリーに続きます。
※ CakePHP修業は百式管理人がSNSっぽいものをCakePHPで作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。
Info: CakePHP修行! |
固定リンク |
コメント (0) |
トラックバック (0) |
↑


