SNSっぽい友達系の処理をつくりはじめてみる(CakePHP修行 #38)

SPONSORED LINK

Pocket

さてCakePHP。なんだかいろいろやりました。中途半端なところではありますが、とにかく途中経過報告。

これ書いたら寝ようかな・・・。

■ DEBUGは2に設定

青い人のおすすめに従い、開発中はDEBUGレベルを2にしてみました(/config/core.php)。これをやるとどういう動作が起きているかのSQL文を画面の下に出してくれます。なんと便利!いままで何でやらなかったのだろう。

debug_2.gif

↑ こういった感じでSQLの動きがわかります。

■ 友達系の処理

さていよいよSNSっぽい処理を作っていきます。まずは自分の友達一覧画面。以下のような感じになるように作ります。

friends_top.gif

↑ イメージはこんな感じっすかね。というか、もう動いているけど。

■ 友達を招待する

友達を招待画面は以下のとおり。メールアドレスとコメントを入れれば招待メールを出してくれます。

friends_inv.gif

↑ メールアドレスのみ必須ということで。

で、コードですが、ちょっとはまりましたが、完成系はこちら。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で作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。

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

SPONSORED LINK