我想知道如何将以下代码添加到我的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