-4

ほぼ同じコードの 2 つの連続した elseif ブロックがあるため、コード ロジックに間違いがあると思います。

//first elseif
elseif (!$socialUser && empty($siteUserId)) {
        //first time user
        $secretWord = $this->RandomString->getRand(7);
        $data = array('User'=> array(
                  'username' => $this->userData['username'],
                  'password' => $this->Auth->password($secretWord),
                  'email' => $this->userData['email'],
                  'name' => $this->userData['name']               
              ));
        $siteUserId = $this->_addSiteUser($data);
        if ($siteUserId){
          $data = array('SocialUser' => array(
            'title' => 'facebook',
            'identifier' => $this->FB_userId,
            'user_id' => $siteUserId
        ));
          if ($this->_addSocialUser($data)){
            $this->Auth->login($siteUserId);
            $l = $this->Session->read('Auth.redirect');
        if (empty($l)) $l = array('controller' => 'qurans', 'action' => 'index');       
        $this->controller->Session->setFlash(__('You are logined using Facebook Sucessfully!'.$this->userData['name'], true).' '.$secretWord, 'done_msg');
        $this->Session->delete('Auth.redirect');        
        $this->controller->redirect($l);
          }
          else{
            $this->controller->Session->setFlash(__('There is an error during adding you as a social member. Contact admin!',true), 'error_msg');
         // $this->controller->redirect($this->Auth->loginAction);
          $this->logout();
          $this->controller->redirect(array('controller' => 'qurans', 'action' => 'index'));

          }
        }

    }
//second elseif
    elseif($socialUser && empty($siteUserId)){
      $secretWord = $this->RandomString->getRand(7);
        $data = array('User'=> array(
                  'username' => $this->userData['username'],
                  'password' => $this->Auth->password($secretWord),
                  'email' => $this->userData['email'],
                  'name' => $this->userData['name']               
              ));
        $siteUserId = $this->_addSiteUser($data);
        if ($siteUserId){
//HERE IS ONLY THE DIFFERENCE
          $data = $socialUser;
          $data['SocialUser']['user_id'] = $siteUserId;
//DIFFERENCE END HERE
          if ($this->_addSocialUser($data)){
            $this->Auth->login($siteUserId);
            $l = $this->Session->read('Auth.redirect');
        if (empty($l)) $l = array('controller' => 'qurans', 'action' => 'index');       
        $this->controller->Session->setFlash(__('You are logined using Facebook Sucessfully!'.$this->userData['name'], true).' '.$secretWord, 'done_msg');
        $this->Session->delete('Auth.redirect');        
        $this->controller->redirect($l);
          }
          else{
            $this->controller->Session->setFlash(__('There is an error during adding you as a social member. Contact admin!',true), 'error_msg');
         // $this->controller->redirect($this->Auth->loginAction);
          $this->logout();
          $this->controller->redirect(array('controller' => 'qurans', 'action' => 'index'));

          }
        }

    }

コードは問題なく動作すると思いますが、2 つの連続する elseif ブロックの間でコード ブロックをコピー アンド ペーストするのがうまくいきませんか? このコードを改善するアイデアはありますか? それとも大丈夫ですか?

4

2 に答える 2

2

入れ子にするifs

...
elseif (empty($siteUserId)) {
    // common code
    if ($socialUser) {
        // social-user specific code
    } else {
        // non-social-user specific code
    }
    // more common code
}
...
于 2013-04-20T11:18:26.370 に答える
1

別のネストされた を作成する必要がありますif-else:

elseif (empty($siteUserId)) {
    ...
    if ($socialUser) {
        ...
    } else {
        ...
    }
    ...
}

empty($siteUserId)このようにして、 ifの場合に共通するコードを分離しtrue、残りの部分を のブール値に基づいて区別することができます$socialUser

于 2013-04-20T11:20:20.320 に答える