Codeigniter -> Извлечение дополнительных данных - PullRequest
0 голосов
/ 06 марта 2012

У меня есть следующий код, который подтверждает активацию с базой данных. То, чего я сейчас не хочу, это то, что является лучшим способом, чтобы позволить мне, так что извлеките имя пользователя userFirstName, которое связано с конкретным кодом активации? и как бы передать его как $data['userFirstName'] = What в контроллер.

Модель:

function confirmUser($activateCode)
{
    if($activateCode == '')
    {
        return FALSE;
    }
 //Selects the userID where the given URI activateCode = ?

    $this->db->select('userID');
    $this->db->from('users');
    $this->db->where('userActiveCode', $activateCode);

    $result = $this->db->get();

    if($result->num_rows == 1)  // If the above result is = 1 then update the userActive row else it will fail
    {
        $this->db->set('userActive', 1);
        $this->db->where('userActiveCode', $activateCode);
        $this->db->update('users');

        return TRUE;
    }else{
        return FALSE;
    }       

}

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Вы также можете использовать параметр ссылки для метода вашей модели, чтобы вернуть имя пользователя вызывающей стороне. Это позволило бы получить чистое логическое возвращаемое значение.

Модель

function confirmUser($activateCode, &$userFirstName) 
{ 
   if($activateCode == '') 
       return false;

    $this->db->select('userID, userFirstName'); 
    $this->db->from('users'); 
    $this->db->where('userActiveCode', $activateCode); 

    $result = $this->db->get(); 

    if($result->num_rows == 1)
    { 
        $this->db->set('userActive', 1); 
        $this->db->where('userActiveCode', $activateCode); 
        $this->db->update('users'); 

        $userFirstName = $result->row()->userFirstName;
        return true; 
    }
    else
        return false;     
} 

Caller

$userFirstName = '';
if ($this->user_model->confirmUser($activate_code, $userFirstName))
    //userFirstName will be populated
    $data['userFirstName'] = $userFirstName;
else
    //userFirstName will still be empty

При передаче по ссылке, в отличие от передачи по значению, вы, по сути, передаете указатель (адрес памяти) в область памяти, в которой хранится значение, а не фактическое значение; поэтому, когда вы изменяете значение в методе, параметр, который был передан вызывающей стороной по ссылке, также изменяется. Это потому, что они оба указывают на один и тот же точный адрес памяти.

0 голосов
/ 06 марта 2012

Если вы обновите свой оператор SELECT для получения userFirstName, у вас будет доступ к нему в ваших результатах:

// setting up the query
$this->db->select('userID, userFirstName');
$this->db->from('users');
$this->db->where('userActiveCode', $activateCode);

$result = $this->db->get();

if($result->num_rows == 1)
{
    $this->db->set('userActive', 1);
    $this->db->where('userActiveCode', $activateCode);
    $this->db->update('users');

    return $result->row()->userFirstName;
}else{
    return FALSE;
}       

На стороне контроллера confirmUser теперь возвращает имя пользователя (если доступно) или false при ошибке. Это позволяет вам сделать что-то вроде этого:

if ($username = $my_model->confirmUser) {
  echo 'Welcome, ' . $username;
} else {
  echo 'Failed checking confirmation token';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...