在codeigniter中拥有动态全局的最佳实践是什么?
我想根据从数据中加载的密钥加载一个带有常量的文件我试过库,但它们在模型初始化之前就已经加载了
我希望它如何工作:
1) 用户登录2) php检查该用户是普通用户(来自数据库)还是管理员3) 如果是常规用户,我将相应地定义全局变量否则我将使用不同的全局变量
当有人登录时,这种情况应该只发生一次。我就是这样做的:
人员登录后,php检查(在同一控制器中)需要如何定义全局变量。它定义了它们,但一旦我从另一个控制器调用这些变量,它们就会被擦除。(我用AJAX调用另一个控制器)哦,我还应该说,当我们同时运行多个AJAX请求时,CI有错误(如果同时使用AJAX,则不能使用CI会话)
所以真正的问题是:我该如何防止它们被删除?
感谢
第一个-简单的部分:
使用AJAX的CodeIgniter数据库会话已经解决(最近)。
第二,关于全球:
我给你的建议是,首先扩展CodeIgniter的CI_Controller
类,实现Phil Sturgeon的博客《保持干燥》中概述的技术。完成后,让所有控制器从MY_Controller
继承,而不是直接从CI_Controller
继承。
然后您可以拥有MY_In_Controller
、MY_Out_Controller
、MY_Admin_Controller
。。。等等从MY_Controller
扩展而来,但我离题了。重要的部分是在新的基本控制器中检查登录状态并设置全局。
class MY_Controller extends CI_Controller{
function __construct(){
parent::__construct();
$l = $this->session->userdata("loggedin");
if((!isset($l))||($l==FALSE)){
/*user is logged out - set appropriate globals*/
}
else{
/*user is logged in - fetch them from the database and set appropriate globals*/
}
}
}
现在,当您创建新的控制器时,例如Blog
、News
或About
,您不必每次都设置全局变量,它们将可以在控制器、模型和视图中访问;这一切都是因为父类会照顾它。