バグつぶし他(emptyとisset、WWW_ROOT、low関数)・・・(CakePHP修行 #27)

SPONSORED LINK

Pocket

さてCakePHP修行。ちなみに昨日はサイゼリヤで深夜1時から4時まで作業しました。今朝、あらためてコードを見てみるとバグ&穴だらけでした。

次の処理に移る前にいくつか細かい点を直しておきます。

■ パスワードの処理が間違えていた

users_controller.php中、edit()の処理が間違えていました。どうりでうまくログインできないと思った・・・。

$this->data['User']['pwd'] = isset($this->data['User']['pwd']) ? sha1(PWD_KEY.$this->data['User']['pwd']) : $this->User->read('pwd');

これだとパスワード空欄でSubmitしたときにissetがTrueになってしまいますね・・・正しくはemptyでした。あと、そのほかの処理も加えてもう一度リファクタリングした結果がこちら。

function edit ()
{
  $this->pageTitle = 'Edit My Profile';
  $this->checkSession();
  $me = $this->User->findById($this->Session->read('my_id'));
  $this->set('me', $me);
  if (empty($this->data))
  {
    $this->data = $me;
  }
  else
  {
    // password change
    $this->data['User']['pwd'] = empty($this->data['User']['pwd']) ? $me['User']['pwd'] : sha1(PWD_KEY.$this->data['User']['pwd']);
    // file upload
    if (!empty($this->data['User']['pic']['name']))
    {
      $ext = low(preg_replace("!.*\.!", null, $this->data['User']['pic']['name']));
      $filename = sprintf("%05d.%s",$me['User']['id'], $ext);
      move_uploaded_file($this->data['User']['pic']['tmp_name'], WWW_ROOT."pics".DS.$filename);
      $this->data['User']['pic'] = $filename;
    } else {
      $this->data['User']['pic'] = $me['User']['pic'];
    }
    // save
    if ($this->User->save($this->data['User']))
    {
      $this->Session->write('sys_msg', 'Your profile has been updated.');
      $this->redirect('/users/home/');
    }
  }
}

上記ですが、いきなり$meにユーザーデータを突っ込んでしまったのですが、良いですかね?それとも$this->User->idだけ取得しておいてその都度必要なデータを取得したほうが良かったのだろうか。ちょっと富豪的ですが、個人的にわかりやすいからこれでいいかな?

あと、前回書いた/webrootへの定数ですが、あらためてマニュアルを読むとWWW_ROOTなるものがありました・・・。

それからstrtolower()はlow()で再定義されているのですね。こちらも便利。

そんなところですかね。では今からプロフィール画像の削除処理に移ります。

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

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

SPONSORED LINK

  1. No comments yet.

  1. No trackbacks yet.