codeigniter - 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 中的单例模式,变量似乎会永久存在。事实并非如此。
AJAX 加载run()
本质上是一个单独的请求(将其视为页面刷新)。index()
先前在请求中定义或仅在请求中index()
定义的任何变量都将不可用。
您有 3 个选项可以将变量从一个调用转移到下一个调用:会话、cookie 或数据库。
推荐阅读
- javascript - 网址对 Google 来说是未知的 - 这是否仍会被编入索引?
- mysql - 确定月初到当前日期的平均值
- c# - vscode omnisharp intellisense 不适用于 dotnet 5.0(目标 net5.0)
- tensorflow - 为什么 Keras LSTM 训练有 3 个损失但有 2 个准确度?
- php - 正则表达式 - 需要在特定 javascript 变量的站点源代码之间提取 json
- javascript - Window 和 Screen 对象属于 DOM API 还是 BOM API?
- python - 将带有周数的列转换为日期
- python - 如何将列表中的匹配元素附加到另一个列表?
- html - 有没有办法在站点中添加阿拉伯语?
- git - 删除了 github repo 中的主要提交