2010-11-07 125 views
3

文本的生命周期是相当长的,这个问题其实很简单,写在大胆。其他文本仅用于解释问题。笨:该控制器

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

我当时的想法是在我的店铺控制器在哪里存储其传递到并从我filterview我的滤波值的数组,所以在滤镜菜单根处理多种类型的过滤器。

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

我的问题其实很简单:这是真的,控制器实例在每次调用控制器功能产生的?否则,我做错了什么导致控制器实例在每个控制器调用中被重新实例化...

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

+0

嘿...如果你真的想得到很好的帮助,你应该发布你的代码。就在蝙蝠之后,听起来你正在做一些你可能不应该做的事情,但是很难在没有看到你的实际代码的情况下查明问题。 – treeface 2010-11-07 19:02:12

回答

3

是不是真的在每次调用 控制器函数时都创建了控制器 实例?否则, 我是什么做错了造成 控制器实例是 在每个控制器 通话重新实例..

是,控制器实例被重新实例每次进行到控制装置的呼叫时间。在CodeIgniter中,每个用户与你的应用程序进行交互都不存在控制器的持久化实例(与使用C++构建的单用户应用程序不同)。你所拥有的是会话管理,在这里你使用Session变量来存储持久化到用户浏览器和Web服务器之间的特定会话的数据(more)。另一种方法是使用cookie。我个人比较喜欢使用cookie。

没有使用$ _SESSION为您过滤器的目的没有坏处,而且不反对OOP原则。重要的是,一旦你的控制器实例加载(这就是OOP概念的起点),你如何使用存储在Session变量中的数据。

0

Shivaas,同样的答案可以通过模型安全地使用?那么自动加载模型呢?我的意思是,自动加载它只是一种避免在需要时输入$ this-> load-> model('the_model')的方法?如果没有重复使用会话/数据库,没有办法使用单例模式?

private $instance; 

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

一旦init_model退出,类实例被销毁因此$实例将总是被初始化为一个新的数组()?