CodeIgniter:控制器的生命周期

时间:2010-11-07 17:55:49

标签: codeigniter

文字很长,问题实际上很简单,用粗体写。另一个文本仅用于解释问题。

我最近开始使用CodeIgniter来开发我的网站。目前,我正在编写一个侧边菜单,您可以在其中过滤视图中显示的项目(基本电子商务功能)。

我的想法是在我的Shop-controller中有一个数组,我存储我的过滤值,这些过滤值传递给我的过滤器视图,因此过滤器菜单可以处理几种类型的过滤器。

问题是,每次调用控制器时,似乎都会运行控制器的构造函数。我认为控制器只在用户进入网站时构建一次。我是网站开发的新手,主要是一个C ++的家伙,所以这对我来说似乎有点奇怪。

我的问题实际上很简单:每次调用控制器函数时都会创建控制器实例吗?否则,我在做什么错误导致在每次控制器调用时重新实例化控制器实例...

我希望我的问题不会太模糊。对我来说,了解CodeIgniter的生命周期行为对于找到一个简单的解决方案非常重要。我想避免使用$ _SESSION,因为我想使用类似OOP的解决方案。

2 个答案:

答案 0 :(得分:3)

  

控制器是真的吗?   每次调用a时都会创建一个实例   控制器功能?不然,什么   我做错了导致   控制器实例   在每个控制器上重新实例化   调用..

是的,每次调用该控制器时都会重新实例化控制器实例。在CodeIgniter中,对于与您的应用程序交互的每个用户而言,没有控制器的持久实例(与C ++中构建的单用户应用程序不同)。您所拥有的是会话管理,您可以使用会话变量将持久数据存储在用户浏览器和Web服务器(more)之间的特定会话中。另一种方法是使用cookie。我个人更喜欢会话而不是cookie。

对于过滤器使用$ _SESSION没有任何害处,并且它不符合OOP原则。重要的是在控制器实例加载后如何使用存储在Session变量中的数据(这就是OOP概念发挥作用的地方)。

答案 1 :(得分:0)

Shivaas,同样的答案可以安全地与模特一起使用?自动加载模型怎么样?我的意思是,自动加载它只是一种避免在需要时输入$ this-> load->模型(' the_model')的方法?如果不重复使用会话/数据库,就无法使用单例模式吗?

private $instance;

function init_model() {
    if ($this->instance === NULL) {
        $this->instance = array();
    }
    return $this->instance;
}

一旦init_model退出,类实例就会被销毁,所以$ instance将始终初始化为一个新数组()?