我想知道如何将以下代码添加到我的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);
}
为什么以上代码不起作用?构造函数需要不同的代码吗?
答案 0 :(得分:1)
在这个意义上,构造函数与所有其他方法(以及类似函数)一样工作,因此您的变量受变量范围的限制。
执行:
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,ex。
function index()
{
$this->load->view('myview',$this->viewdata);
}
并在myview.php中访问它:
echo $pagecontent;
答案 1 :(得分:1)
看起来你有一些范围问题。由于变量是在__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
您可能希望以不同的方式设置它,但希望您能够了解变量和范围。