使用debug()导致';CakeException';带有消息';标题已发送';关于CakePHP2.6.0

使用debug()导致';CakeException';带有消息';标题已发送';关于CakePHP2.6.0,cakephp,Cakephp,现在,我不知道这是一个bug还是一个特性?在CakePHP 2.6上,当我尝试在任何控制器中使用basics.php中的debug()方法时,我收到以下消息: 应用程序错误:调用处理程序方法异常“CakeException” 已发送邮件的标题 /第120行的Applications/MAMP/htdocs/cakephp26/lib/Cake/basics.php 在里面 /Applications/MAMP/htdocs/cakephp26/lib/Cake/Network/CakeRespo

现在,我不知道这是一个bug还是一个特性?在CakePHP 2.6上,当我尝试在任何控制器中使用
basics.php
中的
debug()
方法时,我收到以下消息:

应用程序错误:调用处理程序方法异常“CakeException” 已发送邮件的标题 /第120行的Applications/MAMP/htdocs/cakephp26/lib/Cake/basics.php 在里面 /Applications/MAMP/htdocs/cakephp26/lib/Cake/Network/CakeResponse.php:523 堆栈跟踪:#0 /Applications/MAMP/htdocs/cakephp26/lib/Cake/Network/CakeResponse.php(419): CakerResponse->_sendHeader('HTTP/1.1 200 OK')#1 /Applications/MAMP/htdocs/cakephp26/lib/Cake/Routing/Dispatcher.php(174): CakerResponse->send()#2 /Applications/MAMP/htdocs/cakephp26/app/webroot/index.php(118): 调度程序->调度(对象(CakeRequest),对象(CakeResponse))#3 {main}


在CakePHP的早期版本中,允许从视图以外的其他位置
调试()

以下代码将在2.6.0中引发异常,但在<2.6.0的版本中不会引发异常

public function getposts() {
    $this->autoRender = false;
    $data = $this->Post->query("SELECT * FROM posts");
    pr($data); // or echo json_encode($data);
}
根据该“功能”的作者,当使用>=2.6.0和debug>0时,我们现在需要在控制器中使用pr()、echo、debug()等的方法末尾添加exit()或die()


很抱歉,这不是答案,但我只是想分享我的发现。

然后使用debug()+die()。你不应该让后续代码运行,尤其是在尝试发送重定向时。是的,我知道,但这只是为了开发目的。先把这行代码放一段时间来检查一些东西(然后再删除它),然后应该运行下面的代码。它在没有重定向的情况下抛出一个异常事件(所讨论的错误消息只是其中的一部分,因为我最终得到了“内存已超出”错误)。不管怎么说,之前这不是问题,所以有些东西已经改变了,但它是未记录的?不要这样发展。这需要麻烦。如果需要运行以下代码,请使用CakeLog::write()等,将其记录下来,而不是输出内容。是的:@mark这个改变真的破坏了我的很多网站。我有许多控制器函数使用autoRender=false,并使用pr()和echo等输出一些数据。现在它们都会引发异常。但很难理解例外情况是什么。恐怕在此期间,我不得不将评级下调至2.5.8。我当然希望这能在2.6.1中得到重新审视。你能提供这个“特性”的参考吗?这个问题正在讨论中,并且正在考虑一些缓解措施。如果你有一个操作的单元测试,你不能使用exit或die,因为单元测试将不再有效。我认为这在2.6.0中是一个糟糕的特性是的,核心开发人员现在知道了。它在2.6.1中得到了修复(它现在只会引起一个通知,而不是一个异常,而且我相信只有在调试打开时才会引起)。见: