Codeigniter构造函数-加载数据库+设置变量


Codeigniter constructor - Load database + set variables

我想知道如何将以下代码添加到我的codeigniter构造函数中:

$this->load->model('members_model');
            $member = $this->session->userdata('email_address');
            $viewdata['pagecontent'] = $this->members_model->get_profile($member);

代码在整个控制器中使用,每次重复它似乎很愚蠢。当我尝试将它添加到构造函数时,我无法引用设置的变量。

这是目前为止的构造函数:

public function __construct(){
        parent::__construct();  
        Accesscontrol_helper::is_logged_in_super_user();    
        $this->load->model('members_model');
        $member = $this->session->userdata('email_address');
        $viewdata['pagecontent'] = $this->members_model->get_profile($member);
    }

为什么上面的代码不能工作?构造函数需要不同的代码吗?

在这种意义上,

构造函数的工作方式与所有其他方法(以及函数)类似,因此您的变量受变量作用域的约束。

:

class Mycontroller extends CI_Controller {
public $viewdata = array();
    function __construct()
    {
      parent::__construct();
      Accesscontrol_helper::is_logged_in_super_user();
      $this->load->model('members_model');
      // $this->load->library('session');
      // $this->load->database();
      // ^- if not already autoloaded
      $member = $this->session->userdata('email_address');
      $this->viewdata['pagecontent'] = $this->members_model->get_profile($member);
    }
}

然后,在其他控制器的方法中,你只需调用类属性$this->viewdata,例如

function index()
{
  $this->load->view('myview',$this->viewdata);
}
并在myview。php: 中访问它
echo $pagecontent;

看起来你有一些范围问题。由于变量是在__construct()方法内部声明的,因此这是唯一能够引用它们的方法。你需要把它们变成类变量,以便在你所有的方法中访问它们。

试试这样写:

class Your_class extends CI_Controller {
    protected $member;
    protected $viewdata;
    public function __construct()
    {
        parent::__construct();
        Accesscontrol_helper::is_logged_in_super_user();    
        $this->load->model('members_model');
        $this->member = $this->session->userdata('email_address');
        $this->viewdata['pagecontent'] = $this->members_model->get_profile($member);
    }
}

那么您可以在您的其他方法中引用$member$viewdata,如:$this->member

您可能想要稍微改变一下设置,但是希望您了解了变量和作用域的概念。