开发者

PHP/CodeIgniter - Setting variables in __construct(), but they're not accessible from other functions

I'm happy a bit of a variable scoping problem. Maybe I just need more coffee...

Here's my (simplified) code - this is in CodeIgniter 2:

class Agent extends CI_Controller {     

public function __construct()
{
    parent::__construct();

    $this->load->model('agent_model');

    // Get preliminary data that will be often-used in Agent functions
    $user   = $this->my_auth_library->get_user();
    $agent  = $this->agent_model->get_agent($user->id);
}

public function index()
{       
    $this->template->set('info', $this->agent_model->get_info($agent->id));

    $this->template->build('agent/welcome');
开发者_如何转开发}

Unfortunately, when I run the index function, I'm told:

A PHP Error was encountered

Severity: Notice
Message: Undefined variable: agent
Filename: controllers/agent.php
Line Number: 51

Line 51 is the first line of the index function. What's going wrong? Is this a scope issue or something else?

Thanks!


You haven't set $agent in your index action, if you want variables set in the constructor accessible then you have to set them as a class property ie: $this->Agent = ...;, and access them in the same way with $this->Agent->id. (I would capitalise them to show that they are objects and not just variables) For example:

$this->User   = $this->my_auth_library->get_user();
$this->Agent  = $this->agent_model->get_agent($user->id);

The constructor behaves the same as any other class methods, its only special property is that it's automatically ran when the class is instantiated, normal variable scope still applies.


you need to define the variables outside the constructor, like this:

class Agent extends CI_Controller {   

    private $agent;
    private $user;  

    public function __construct() {

        parent::__construct();

        $this->load->model('agent_model');

        // Get preliminary data that will be often-used in Agent functions
        $this->user   = $this->my_auth_library->get_user();
        $this->agent  = $this->agent_model->get_agent($user->id);
    }

    public function index() {   

        $this->template->set('info', $this->agent_model->get_info($this->agent->id));

        $this->template->build('agent/welcome');
    }
}

then you can set and get them using $this->agent

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜