2015-02-03 4 views
3

Я создал систему входа, которая использует User (класс) в этом классе. Я устанавливаю объект данных. Тем не менее, я выхожу из двух разных таблиц и объединяю результаты вместе. Я сделал var_dump внутри моего метода входа, который показывает мне всю правильную информацию непосредственно перед моим заявлением RETURN.PHP Слияние двух массивов объектов/после перенаправления потери второй части

Однако, как только вход завершен и я перенаправлен на страницу index.php, я могу получить доступ к данным объекта пользователя из первой таблицы, а MERGE потерян.

В чем может быть проблема?

Вот некоторые из моего кода:

INDEX

$user = new User(); 
if($user->isLoggedIn()){ 
?> 
<p>Hello <a href="#"><?php 
var_dump($user->data()); 
if(escape($user->data()->first_name) === NULL){ 
    echo escape($user->data()->username); 
} else{ 
    echo escape($user->data()->username); 
}?></a></p> 

ВХОД

  $user = new User(); 
      $login = $user->login(Input::get('username'), Input::get('password')); 
      if($login){ 
       Redirect::to('index.php'); 

USER CLASS

// Login function 
public function login($username = NULL , $password = NULL){ 
    $user = $this->find($username); 
    if($user){ 
     if(password_verify($password, $this->data()->password)){     
      // GRAB THE ID of user for pulling info from the personal 
      $userId = $this->_data->id; 
      $personal = $this->_db->get('personal', array('id', '=', $userId)); 
      $this->_data = (object) array_merge((array)$this->data(),(array) $personal->first()); 
      // VAR DUMP HERE SHOWS ALL CORRECT INFO 
      Session::put($this->_sessionName, $this->data()->id); 
      return TRUE; 
     } 
    } 
    return FALSE; 
}// End Login 

// Find user 
private function find($user = NULL){ 
    if($user){ 
     $field = (is_numeric($user))?'id':'username'; 
     $data = $this->_db->get('users', array($field, '=', $user)); 
     $u = $data->first();   
     if($data->count()){ 
      $this->_data = $data->first(); 
      return TRUE; 
     } 
    } 
    return FALSE; 
} // End FIND 

Любые и вся помощь очень ценится, благодаря

Добавлено: Конструктор

$this->_sessionName = Config::get('session/session_name'); 

     if(!$user){ 
      if(Session::exists($this->_sessionName)){ 
       $user = Session::get($this->_sessionName); 

       if($this->find($user)){ 
        $this->_isLoggedIn = TRUE; 
       }else{} 
      } 
     }else {$this->find($user);} 
+0

Вы работаете в системе? – Rafael

+0

Нет, с нуля – theStudent

+0

О, хорошо, это выглядит как материал рамки. Отличная работа. – Rafael

ответ

0

решаемые

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

Итак, я переместил код, в котором я объединяю массивы объектов в конструктор, и теперь все работает отлично.

Вот код:

public function __construct($user = null){ 
     $this->_db = DB::getInstance(); 
     $this->_sessionName = Config::get('session/session_name'); 

     if(!$user){ 
      if(Session::exists($this->_sessionName)){ 
       $user = Session::get($this->_sessionName); 

       if($this->find($user)){ 
        $this->_isLoggedIn = TRUE; 
        // GRAB THE ID of user for pulling info from the personal 
        $userId = $this->_data->id; 
        $personal = $this->_db->get('personal', array('id', '=', $userId)); 
        $this->_data = (object) array_merge((array)$this->data(),(array) $personal->first()); 
       }else{logout();} 
      } 
     }else { 
      $this->find($user); 
     } 
    } 

Так что трюк был в конструкторе, если пользователь существует, он был вызовом функции пользователя FIND (и я добавил сливаться внутри функции входа).

Надеюсь, это поможет кому-то еще, а также благодарит всех за попытку, я действительно ценю это.

Смежные вопросы