Codeigniter getinstance () ошибка, не загружающая любую библиотеку, помощники? - PullRequest
2 голосов
/ 25 января 2012

я создаю систему входа в систему с помощью codeigniter.я новый в codeigniter.я получаю эту ошибку при тестировании моей системы входа в систему

    A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: controllers/login.php

Line Number: 92

Fatal error: Call to a member function userdata() on a non-object in P:\xampp\htdocs\xxxxx\xxxxx\application\controllers\login.php on line 92

вот мой файл контроллера login.php

<?php
class Login extends CI_Controller {

    function __construct()
    {
        if($this->is_logged_in() === true){
            redirect('welcome');
        }
    }

    function index()
    {
        $data['main_content'] = 'login_form';
        $data['class_name'] = get_class();
        $data['no_header'] = '1';
        $data['no_footer'] = '1';
        $this->load->view('includes/template', $data);      
    }

    function validate_credentials()
    {       
        $this->load->model('admin_model');
        $query = $this->admin_model->validate();
        print_r($query);
        if($query) // if the user's credentials validated...
        {
            $data = array(
                'AdminID' => $query,
                'is_logged_in' => true
            );
            $this->session->set_userdata($data);
            redirect('welcome');
        }
        else // incorrect username or password
        {
            echo "here";
            exit;
            $this->index();
        }
    }   

    function signup()
    {
        $data['main_content'] = 'signup_form';
        $this->load->view('includes/template', $data);
    }

    function create_member()
    {
        $this->load->library('form_validation');

        // field name, error message, validation rules
        $this->form_validation->set_rules('first_name', 'Name', 'trim|required');
        $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required');
        $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email');
        $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
        $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]');


        if($this->form_validation->run() == FALSE)
        {
            $this->load->view('signup_form');
        }

        else
        {           
            $this->load->model('membership_model');

            if($query = $this->membership_model->create_member())
            {
                $data['main_content'] = 'signup_successful';
                $this->load->view('includes/template', $data);
            }
            else
            {
                $this->load->view('signup_form');           
            }
        }

    }

    function logout()
    {
        $this->session->sess_destroy();
        $this->index();
    }

    function is_logged_in()
    {
        $CI =&get_instance();
        $is_logged_in = $CI->session->userdata('is_logged_in');
        if(isset($is_logged_in) || $is_logged_in === true)
        {
            return true;
        }else{
            return false;
        }
    }
}

я пробовал

$CI =&get_instance();

$CI =get_instance();

$this->session->userdata

все триКстати, но получаю ошибку.

Ответы [ 2 ]

3 голосов
/ 25 января 2012

вы вызываете функцию is_logged_in() в конструкторе контроллера без предварительного вызова родительского конструктора.возможно, именно поэтому некоторые ресурсы еще не загружены.

попробуйте добавить это:

function __construct()
{
    parent::__construct(); //you always have to call parent's constructor before ANYTHING

    if($this->is_logged_in() === true){
        redirect('welcome');
    }
}
0 голосов
/ 25 января 2012

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

Просто сделайте, предполагая, что сессия уже загружена и, как отмечено @jere, вы вызываете parent :: __ construct () в вашем контроллере:

function is_logged_in()
{
    $is_logged_in = $this->session->userdata('is_logged_in');
    if(isset($is_logged_in) || $is_logged_in === true)
    {
        return true;
    }else{
        return false;
    }
}

Не знаю, зачем здесь использовать другой экземпляр класса.

Если вам это нужно, попробуйте снова загрузить библиотеку сессий, например:

$CI->load->library('session')
$is_logged_in = $CI->session->userdata('is_logged_in');
//rest of your old code 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...