设置用于存储用户电子邮件的变量,而不重复每个函数中的代码

时间:2015-11-15 14:36:55

标签: php codeigniter credentials ion-auth

我正在使用带有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,每个页面都是相同的。如何在不重复此行代码的情况下让所有人都可以访问它?

2 个答案:

答案 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的控制器中的每个视图方法都可以访问此变量。