ShoeLace1291
ShoeLace1291

Reputation: 4698

Is it possible to have global class variables in CodeIgniter?

I am developing an application in CodeIgniter that has a member login system. I have a model that gets all the information of a requested member.

class Member extends CI_Model {

var $info = array();
var $error = NULL;

function __construct(){

    parent::__construct();

}

public function get_info($member_id = ''){

    $this->db->where('member_id', $member_id);
    $this->db->limit(1);
    $query = $this->db->get('members');

    if($query->num_rows() > 0){

        $member = $query->row_array();

        $info = array(
            'id' => $member['member_id'],
            'display_name' => $member['display_name'],
            'email_address' => $member['email_address'],
            'password' => $member['password'],
            'status' => ($member['status'] == 0) ? FALSE : TRUE,
            'activation_code' => $member['activation_code'],
            'location' => $member['location'],
            'date_joined' => date('M jS, Y', $member['date_joined']),
            'gender' => ($member['gender'] == 0) ? 'Male' : 'Female',
            'results_per_page' => $member['results_per_page'],
            'admin_emails' => ($member['admin_emails'] == 0) ? FALSE : TRUE,
            'member_emails' => ($member['member_emails'] == 0) ? FALSE : TRUE
        );

        $this->info = $info;

    } else {

        $this->error = 'The member you requested could not be found in our database.';

    }

}

At the top of my controllers and other models, I use the following to get the information of the current user to pass it along to all of the methods.

function __construct(){

    parent::__construct();
    $this->member->get_info($this->session->userdata('member_id'));
    $this->user = $this->member->info;

}

function index(){

 if($this->user['id'] > 0){

      echo "You are logged in!";

 } else {

      echo "You are NOT logged in!";

 }

}

Is there a way to do this on a global scale? It's kind of tiresome to type out the construct code at the top of every controller.

Upvotes: 1

Views: 817

Answers (2)

ShoeLace1291
ShoeLace1291

Reputation: 4698

So I managed to find another post here on StackOverflow that solved my problem.

enter link description here

In application/core, I extended the existing Controller and Model classes with a few additions. Then I had to change my controllers and models to suit.

class Home extends MY_Controller {

}

application/core/MY_Model.php

class MY_Model extends CI_Model {

var $user = array();

function __construct(){

    parent::__construct();

    $this->load->model('member');
    $this->member->get_info($this->session->userdata('member_id'));
    $this->user = $this->member->info;

}

}

application/core/MY_Controller.php

class MY_Controller extends CI_Controller {

var $user = array();

function __construct(){

    parent::__construct();

    $this->load->model('member');
    $this->member->get_info($this->session->userdata('member_id'));
    $this->user = $this->member->info;

}

}

Upvotes: 1

GautamD31
GautamD31

Reputation: 28763

In construct simply try to access session data

function __construct() {
     if($this->session->userdata('member_id')) {
          echo 'You are logged in';
     } else {
          echo 'You are not logged in';
     }
}

It is simple rather than getting all the data and selecting 'user id',if we check whether ths session data is there then a user is logged in orelse no one is logged.You can add this at your each controller construct function and you can check without help of any DB

Upvotes: 0

Related Questions