【问题标题】:Yii displays standard error even in debug modeYii 即使在调试模式下也会显示标准错误
【发布时间】:2015-05-11 06:08:12
【问题描述】:

我的CGridView 中有一个错误。其中一列尝试从非对象中读取属性。就在行之前,它呈现了这个网格视图(即在<?php $this->widget('GridView', array ( 上方)我放置了以下代码:

<?php
    echo 'YII_DEBUG = '.print_r(YII_DEBUG, TRUE);
    var_dump(YII_DEBUG);
    echo 'YII_TRACE_LEVEL = '.print_r(YII_TRACE_LEVEL, TRUE);
    var_dump(YII_TRACE_LEVEL);
    die();
?>

它给了我以下结果:

YII_DEBUG = 1
bool(true)
YII_TRACE_LEVEL = 3
int(3)

但是,当我删除或注释掉这段代码时,下一行(发生错误的地方)不会导致 Yii 呈现有关错误的典型全栈调试信息(包括文件、行和堆栈跟踪)。相反,我看到一条用site/error 视图呈现的单行错误消息,正如我应该看到的那样,调试实际上会被关闭(但它不是):

几个月来我一直在为此苦苦挣扎,但我不知道是什么原因导致 Yii 忽略调试设置并在没有调试堆栈跟踪的情况下显示错误,即使启用了调试模式。

任何人都可以在这里提供帮助,至少提供一些提示,我应该从哪里开始寻找?

【问题讨论】:

  • 也许apache的日志文件里面有更多的信息?
  • 这怎么可能相关? Yii 错误处理非常完美。它捕获错误并显示正确的消息。这里唯一的问题是,为什么它会忽略YII_DEBUG 设置并像禁用调试模式一样?
  • 好的,现在我明白了...可能是因为您需要在包含 yii.php/yiilite.php 之前定义 YII_DEBUG?
  • 我想你不明白! :> 再次阅读问题。 YII_DEBUG 常量正确定义并且正确设置为true。只是,由于某些我不知道的原因,Yii 忽略了它并采取行动,就像将其设置为 false 或根本未设置一样。
  • 你在调用网格视图之后调用 die() 吗?如果您浏览评论部分,则会看到有关死亡的注释。 yiiframework.com/doc/guide/1.1/en/topics.logging

标签: php debugging yii stack-trace


【解决方案1】:

这是设计使然,因为recent change in Yii 1.1.16。需要说明的是:

'errorHandler'=>array(
    'errorAction' => YII_DEBUG ? null : 'site/error',
),

应用程序的配置数组,在 1.1.16 中具有与早期版本 Yii 相同的行为——即,当 YII_DEBUG 设置为 true 时,始终呈现全栈错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 2011-12-11
    • 2016-12-15
    • 2015-06-27
    • 2012-04-09
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多