首页 > 解决方案 > CodeIgniter 控制器实例化:什么时候发生?

问题描述

我想知道关于何时在 CodeIgniter 中发生实例化的详细信息,特别是控制器的实例化。

假设我有一个名为 Main 的控制器,其结构如下:

class Main extends CI_Controller{

 public $variable;

 public function index(){

    $this->load->view('home/body');
    $this->variable="TEST";

 }

 public function run(){
     do something with $this->variable;
 }

}

假设我在浏览器上调用localhost/index.php/main,从而为第一个 main 实例化控制器Main它的默认方法 index() 只是通过load->view()加载一个 html 页面。

在此页面中,有一个按钮向同一个控制器发出 AJAX 请求以使用方法run(),使用 url localhost/index.php/main/run

此时,$variable是否会未定义?换句话说,Main类会被重新实例化,还是 AJAX 请求会使用之前构建的相同实例?

标签: codeigniter

解决方案


我理解你的困惑。通常使用 codeigniter 中的单例模式,变量似乎会永久存在。事实并非如此。

AJAX 加载run()本质上是一个单独的请求(将其视为页面刷新)。index()先前在请求中定义或仅在请求中index()定义的任何变量都将不可用。

您有 3 个选项可以将变量从一个调用转移到下一个调用:会话、cookie 或数据库。


推荐阅读