这是我的控制器。我需要使用上面的三行作为全局变量。这样所有功能都可以使用它。我该怎么做?
class Some_Controller extends CI_Controller {
$this->load->library('session'); //Must be global
$this->session->set_userdata('email', 'email@hp.com'); //Must be global
$data['current_user']=$this->session->userdata('email'); //Must be global
public function index(){
$data['people'] = $this->some_model->getPeople();
$data['mapList'] = $this->some_model->getMapped();
$data['appServList'] = $this->some_model->getApp_serv();
$this->load->view('templates/header.php',$data);
$this->load->view('some_page/index.php',$data);
/*Serves as the homepage. Shows the list for services, mapped services to an application and the list for application,
from here you can easily add edit and hide items*/
}
答案 0 :(得分:1)
要自动启动会话,您可以在autoload.php中设置$autoload['libraries'] = array('session');
。一旦您在session
中设置了数据,就可以在任何地方使用它。
要在会话中设置数据,您不需要在全局范围内执行此操作,您可以在登录功能中执行此操作。之后在控制器中的当前位置放置public $current_email=$this->session->userdata('email');
并current_email
访问$this->current_emai;
您想要的地方。
访问您可以执行的视图中的变量
$objCI =& get_instance(); //now CI object can be used
echo $objCI->current_email;
答案 1 :(得分:0)
只需将该变量声明为公共
class Some_Controller extends CI_Controller {
//添加可供本类中所有函数使用的全局变量。
public $global_variable = "global_example";
$this->load->library('session'); //Must be global $this->session->set_userdata('email', 'email@hp.com'); //Must be global
$data['current_user']=$this->session->userdata('email'); //Must be global
public function index(){
$data['people'] = $this->some_model->getPeople();
$data['mapList'] = $this->some_model->getMapped();
$data['appServList'] = $this->some_model->getApp_serv();
$this->load->view('templates/header.php',$data);
$this->load->view('some_page/index.php',$data);
/*Serves as the homepage. Shows the list for services, mapped services to an application and the list for application,
from here you can easily add edit and hide items*/
}
答案 2 :(得分:-1)
这里有两点值得注意:
首先和不相关的一个,你需要在成功的认证过程之后设置这样的会话数据,而不是每次都在一般控制器的顶部。
第二个也是重要的一个,我理解你所说的全局变量。当您开始设计应用程序时,您会感到需要多个种类的控制器。例如,您可能有Admin_Controller
,Backoffice_Controller
或Ajax_Controller
个控制器。有些人可能扩展其他人所以,当你说全局变量时,我认为你需要这样的机制。因此,您在父控制器中设置一个变量,它将在您的应用程序的所有派生控制器中可用。我建议您为所有应用程序控制器创建一个Base_Controller
作为父控制器,其中包含所有其他控制器的通用逻辑/数据。
但重点是CodeIgniter默认情况下不支持控制器继承。查看CI Base Controllers项目并阅读文档。它将帮助您实现您的需求,以及更好的面向DRY的应用程序设计。