我正在使用带有Codeigniter 3.0的Ion_Auth库。*。我设法使用我__construct()
的{{1}}方法中的这行代码显示我登录的用户电子邮件:
Admin_Controller
但我需要重复这段代码:
$this->user_email = $this->ion_auth->user()->row();
在每个控制器中的每个视图方法中。我在$data['user_email'] = $this->user_email->email;
中显示变量$user_email
,每个页面都是相同的。如何在不重复此行代码的情况下让所有人都可以访问它?
答案 0 :(得分:0)
将类属性$data
添加到Admin_controller类定义中。
$ data属性将可用于扩展Admin_controller的每个控制器。因为它是一个类属性,所以使用语法$this->data
来访问它。
class Admin_controller extends CI_Controller
{
//our new class property
protected $data = array();
public function __construct(){
parent :: __construct();
// do what is needed to get $ion_auth working
}
}
在构造函数中扩展Admin_controller
set $data['$user_email']
的任何类中。然后它可用于给出$ this-> data
class Some_controller extends Admin_controller
{
public function __construct(){
parent :: __construct();
//I am assuming that by this time $this->ion_auth->user() exists
//so we add a key and value to the class' $data property
//Note the use of the "$this->" syntax)
$this->data['user_email'] = $this->ion_auth->user()->row();
}
public function sets_up_a_view(){
//do stuff until you're ready for the header
//note that we are sending the class property "$this->data" to the view
$this-load->view('header', $this->data);
//load other views as needed using $this-data or other array - your choice
}
public function some_other_view(){
//send class property to view
$this-load->view('header', $this->data);
$data['foo'] = 42;
//send local var to view
$this-load->view('other_parts', $data);
}
}
请注意,sets_up_a_view()
和some_other_view()
都会将类属性“$ this-> data”发送给header.php
。但是在some_other_view()
中,我们设置了一个名为$data
的局部变量来发送到other_parts.php
视图。
答案 1 :(得分:0)
解决方案是在我的Admin_controller
中添加这两行代码:
$data['user_email'] = $this->ion_auth->user()->row()->email;
$this->load->vars($data);
这样,扩展Admin_controller
的控制器中的每个视图方法都可以访问此变量。