0

在 codeigniter 中使用动态全局变量的最佳实践是什么?

我想根据我从我尝试的库中加载的数据加载一个带有常量的文件,但是它们是在模型初始化之前加载的

我希望它如何工作:

1)用户登录 2)php 检查该用户是普通用户(来自数据库)还是管理员 3)如果是普通用户,我将相应地定义我的全局变量,否则我将使用不同的全局变量

这应该只发生一次,当人们登录时。这正是我的做法:

该人登录,php 检查(在同一控制器中)需要如何定义全局变量。它定义了它们,但是一旦我从另一个控制器调用这些变量,它们就会被删除。(我用 AJAX 调用另一个控制器)哦,我还应该说当我们同时运行多个 AJAX 请求时 CI 存在错误(如果同时使用 AJAX,则不能使用 CI 会话)

所以问题真的是:我如何防止它们被删除?

谢谢

4

1 回答 1

1

首先 - 简单的部分:

CodeIgniter 与 AJAX 的数据库会话已得到解决(最近)。

第二 - 关于全局:

我对您的建议是首先扩展 CodeIgniter 的CI_Controller课程,以实现 Phil Sturgeon 的博客题为Keeping It Dry中概述的技术。完成后,让所有控制器继承自 aMY_Controller而不是直接继承自CI_Controller.

然后你可以让MY_In_Controller, MY_Out_Controller, MY_Admin_Controller...etc 从 扩展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*/
        }
    }
}

现在,当您创建新的控制器时,例如BlogNewsAbout,您不必每次都设置全局变量,它们将可以在您的控制器、模型和视图中访问;都是因为父类会照顾它。

于 2012-09-10T22:35:15.393 回答