невозможно установить данные пользователя в коде сеанса - PullRequest
0 голосов
/ 02 ноября 2011

пожалуйста, посмотрите на это.

Код ниже взят из моего класса модели (с использованием datamapper orm)

 function login()
    {

        $u = new User();


        $u->where('username', $this->username)->get();


        $this->salt = $u->salt;

        $this->validate()->get();


        if (empty($this->id))
        {
            // Login failed, so set a custom error message
            $this->error_message('login', 'Username or password invalid');

            return FALSE;
        }
        else
        {
            // Login succeeded
            $data = array
            (
                'username' => $u->username,
                'usergroup' => $u->usergroup->get(),
                'is_logged_in' => true

            );
            $this->session->set_userdata($data);


            return TRUE;
        }
    }

когда я делаю это, я получаю

**Fatal error: Call to a member function set_userdata() on a non-object**

но когда я делаю это вместо этого

$data = array
            (
                'username' => $u->username,
                'usergroup' => $u->usergroup->get(),
                'is_logged_in' => true
            );
            $obj=& get_instance();
            $obj->session->set_userdata($data);

Это работает.

Пожалуйста, как правильно заставить это работать?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 августа 2013

ваша модель не расширяет CI_Model, после этого вам нужно добавить конструктор в вашу модель, добавить этот код в ваш

function __construct()
    {
        parent::__construct();
        $this->load->library('session');
    }
0 голосов
/ 02 ноября 2011

Ну, вы не предоставили достаточно информации. Первый код выглядит нормально при условии, что:

  1. Вы фактически загружаете класс сеанса перед его вызовом (вам также необходимо создать ключ шифрования в ваших конфигах). $this->load->library('session'); $this->session->set_userdata($data);

  2. Приведенный выше код или ваш код находится внутри контроллера, модели или представления. $this относится к суперклассу CI, в частности к экземпляру класса Session, поэтому, если вы вызываете его внутри помощника (набора функций) или внутри библиотеки (где сначала нужно создать экземпляр CI) это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...