CakePHP请求的生命周期是什么?

CakePHP请求的生命周期是什么?,cakephp,model-view-controller,cakephp-2.0,Cakephp,Model View Controller,Cakephp 2.0,Spoiler:我想更好地了解CakePHP应用程序请求的生命周期 背景:我正在使用CakePHP v2.3。我正在调试一个问题,该问题导致我找不到不需要的重定向。我正试图通过递增地添加die()来确定重定向触发的位置,从而在请求的整个生命周期中发挥作用 我遇到了死胡同,因为我可以从控制器的beforeFilter()中终止执行,但是如果我将die()移动到实际操作中,就会发生重定向 因此,我的具体问题是:在beforeFilter之后但在操作之前会发生什么?我知道beforeRender(),

Spoiler:我想更好地了解CakePHP应用程序请求的生命周期

背景:我正在使用CakePHP v2.3。我正在调试一个问题,该问题导致我找不到不需要的重定向。我正试图通过递增地添加
die()
来确定重定向触发的位置,从而在请求的整个生命周期中发挥作用

我遇到了死胡同,因为我可以从控制器的beforeFilter()中终止执行,但是如果我将
die()
移动到实际操作中,就会发生重定向

因此,我的具体问题是:在beforeFilter之后但在操作之前会发生什么?我知道beforeRender(),当我将
die()
放在那里时,它没有任何效果

我更一般/更好的问题是:是否有关于CakePHP请求整个生命周期的文档

这两个问题的答案都很好

更新

感谢Mathew F.的有益建议,我将注意力集中在Auth组件上,因为它几乎是唯一的候选组件,我正在调试的重定向看起来像是手工操作(用户到达authRedirect位置)。但是,当我尝试在AppController的
isAuthorized()顶部执行
die()
操作时,什么也没有发生。我的控制器本身没有
isAuthorized()
。所以这又让我有点困惑了

我遇到了死胡同,因为我可以从控制器的beforeFilter()中终止执行,但是如果我将die()移动到实际操作中,就会发生重定向

这是重定向是由组件执行的一个重要线索

在为请求配置任何内容之前调用
beforeFilter()
。这包括控制器及其组件。在调用控制器的操作之前初始化组件。因此,组件可以重定向(即AuthComponent可以重定向)

因此,我的具体问题是:在beforeFilter之后但在操作之前会发生什么?我知道beforeRender(),当我在那里放置die()时,它没有任何效果

该请求首先由调度器处理。它被路由到控制器的操作。然后实例化该控制器,并实例化其所有组件。对于每个组件,将调用它们的
initialize()
方法。然后调用控制器的
beforeFilter()
方法。然后是所有组件
startup()
方法。然后调用控制器的操作

您可以尝试排除组件以查找导致故障的组件。另一个选项是将
echo“hello”
添加到webroot中的
index.php
。这将强制在发送重定向时出现无法修改
标题的错误。

问得好! 摘自该书:

  • Ricardo单击指向的链接,他的浏览器向您的web服务器发出请求
  • 路由器解析URL以提取此请求的参数:控制器、操作和在该请求期间影响业务逻辑的任何其他参数
  • 使用路由,将请求URL映射到控制器操作(特定控制器类中的方法)。在本例中,它是CakesController的buy()方法。在执行任何控制器操作逻辑之前,将调用控制器的beforeFilter()回调
  • 控制器可以使用模型来访问应用程序的数据。在本例中,控制器使用模型从数据库中获取Ricardo最后购买的物品。在此操作期间,可能会应用任何适用的模型回调、行为和数据源。虽然不需要使用模型,但所有CakePHP控制器最初至少需要一个模型
  • 模型检索到数据后,将其返回给控制器。模型回调可能适用
  • 控制器可使用组件进一步细化数据或执行其他操作(例如,会话操纵、认证或发送电子邮件)
  • 控制器使用模型和组件充分准备数据后,将使用控制器的set()方法将数据传递给视图。可以在发送数据之前应用控制器回调。执行视图逻辑,其中可能包括使用元素和/或辅助对象。默认情况下,视图在布局内部渲染
  • 可以应用其他控制器回调(如afterFilter)。完整的渲染视图代码将发送到Ricardo的浏览器

  • 你好,马修!这真的很有帮助。我当时没有意识到组件已经初始化了。抛出已经发送的
    错误也是一个好主意。我在webroot/index.php中回显了“hello”,它阻止了重定向,但不会抛出错误甚至通知。有什么想法吗?我检查了CakePHP日志和开发服务器的php_error.log。我在问题中添加了一个更新,其中包含与调试Auth组件相关的更多发现。php错误已关闭。您可以尝试在
    core.php
    中设置
    Configure::write('debug',2)
    ,并检查php.ini是否设置了
    error\u reporting=E\u ALL
    display\u errors=1
    。完成后关闭(如果是生产服务器)。放入
    $this->log(Debugger::trace())
    控制器::重定向()
    中,然后检查日志。哇。。。用图表解释得很好。这很有帮助。