【问题标题】:dynamic globals in codeignitercodeigniter 中的动态全局变量
【发布时间】:2012-09-10 05:19:04
【问题描述】:

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

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

我希望它如何工作:

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

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

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

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

谢谢

【问题讨论】:

  • 你能详细说明一下你的过程吗?
  • 你的意思是常量已经加载了?
  • 也许你可以创建一个控制器,然后用常量加载你自己的文件?
  • @Jurgo 这就是我正在做的,但是这些变量被删除了

标签: database codeigniter dynamic global-variables


【解决方案1】:

首先 - 简单的部分:

使用 AJAX has been solved 的 CodeIgniter 数据库会话(最近)。

第二 - 关于全局变量:

我对您的建议是首先扩展 CodeIgniter 的 CI_Controller 类,以实现 Phil Sturgeon 的名为 Keeping It Dry 的博客中概述的技术。完成此操作后,让您的所有控制器都从 MY_Controller 继承,而不是直接从 CI_Controller 继承。

然后您可以从MY_Controller 扩展MY_In_ControllerMY_Out_ControllerMY_Admin_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,您不必每次都设置全局变量,它们可以在您的控制器、模型和视图中访问;都是因为父类会照顾它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多