为什么Code点火器将视图的输出保存在缓冲区中


Why Code igniter holds the output of views in a buffer

我有一个非常基本的代码下面我是新的代码点火器所以原谅我的问题听起来很业余

    public function view($num = 0) {
    echo "View was called<br>";
    $this->load->view("header");
    $this->load->view('xyz');
    $this->load->view('footer');
    echo "View function ended";
    }

好的,所以我想知道为什么代码点火器不输出结果的方式,它是返回

代码的输出如下

  1. 视图被称为
  2. 调用random_func()的结果输出
  3. <
  4. 渲染视图/gh>

期望从输出中得到如下

  1. 视图被称为
  2. <
  3. 渲染视图/gh>
  4. 调用random_func()的结果输出

是否有任何代码点燃特定的行为我错过了?为什么代码点火器在缓冲区中保存视图?

如果您遵循/system/core/Codeigniter.php中的codeigniter生命周期,您将看到最终输出在文件的末尾被调用。

所以视图总是最后一个输出到浏览器,不管它们是怎么被调用的。

当一个视图被调用时,它被存储在缓冲区中,这样它就可以在被发送给最终渲染之前被操纵。

操作缓冲区可以是任何事情,从将一个视图存储到另一个视图,解析/注入变量数据/标签等。

Codeingiter生命周期(按顺序排列)

  1. 定义一些全局常量(CI_VERSION, CI_CORE)版本控制
  2. 加载core/Common.php文件,其中包含一些GLOBAL helper函数
  3. 检查框架正在运行的环境下(本地或远程)
  4. 设置一个自定义错误处理程序来处理错误/异常
  5. 加载配置文件,检查是否有自定义子类前缀如:(MY_)
  6. 设置自由的脚本执行时间限制
  7. 加载基准类,所以这一行下面的任何东西都可以基准测试!
  8. 加载hOOk类并检查它们是否有'pre_system'钩子在application/hooks
  9. 中定义
  10. 加载主配置文件并将文件中的所有内容分配给配置数组
  11. 加载UTF-8和URI类
  12. 加载路由器类并设置缺省路由/应用程序/配置/routes.php =比;default_controller
  13. 加载输出类并检查缓存中是否有任何内容可以直接输出
  14. 加载安全/输入/语言类
  15. 加载Controller类(入口点)和扩展的子类it in application/controllers
  16. 检查控制器方法是否以and _ =>这是私人
  17. 做一些其他的安全检查并查找索引方法控制器,并搜索请求的控制器
  18. 查找pre_controller钩子
  19. 从步骤16实例化请求的控制器
  20. 查找post_controller_construct钩子
  21. 查找controller _remap覆盖函数
  22. 查找post_controller钩子,这发生在控制器之后__construct方法已被调用
  23. 输出最终渲染(缓冲区)到浏览器
  24. 查找postrongystem钩子
  25. 关闭所有打开的数据库连接
  26. 返回步骤1

正如你现在从循环中看到的,如果你想在任何时候拦截它,你会创建一个HOOK,这些钩子会在钩子被调用的时候被注入。

希望能有所帮助