【问题标题】:How to debug Yii extensions?如何调试 Yii 扩展?
【发布时间】:2013-02-22 05:24:13
【问题描述】:

我一直在用 Yii 困扰自己,目前基本上是在尝试完成一个可以(ajax-)刷新到不同规模(如日、周或月)的数据图表。我真的很想使用Amcharts-extension,但基本上像EFlot 这样更简单的东西也可以。

现在,为了不解决我的独特问题,我似乎无法从扩展中生成任何类型的错误或调试消息(至少从我尝试过的这些中)。例如,当我尝试将一些未知变量或格式错误的数据传递给图表小部件时,它最终会为我绘制一张空白纸,什么都没有。此处没有任何内容表示已保留空间但未绘制图表,任何地方都看不到错误消息。

我在我的主配置中启用了CWebLogRoute,它可以在页面中正确显示实际的 Yii 错误,但对于扩展它不会报告任何内容。

那么,在 Yii 中调试扩展的正确方法是什么?是否有一些我刚刚错过的通用接口,或者每个扩展都有自己的方式来提供错误和调试数据?

【问题讨论】:

  • 有时问题是实际上存在错误消息,但您在浏览器中看不到它,例如在 ajax 调用情况下。您可以为您的浏览器 (Firefox) 尝试 Firebug 扩展。在那里,在控制台选项卡中,您将看到应用程序发出的 ajax 请求和响应。
  • 另外,作为旁注,你不必使用 Yii 扩展来处理这个问题。如果你想使用 Eflot,你可以用 Yii 实现它
  • 要指定,我一直在使用 eamchartwidget 和 flot 扩展。据我所知,图表并不是 Yii 的核心功能。

标签: php yii yii-extensions


【解决方案1】:

如果您认为问题出在服务器端,您可以在配置文件(默认为 protected/config/main.php)中打开跟踪日志记录:

'log'=>array(
    'class'=>'CLogRouter',
        'routes'=>array(
                array(
                    'class'       => 'CFileLogRoute',
                    'levels'      => 'error, warning, trace'
                ),

         ),
 ),

并为你的扩展添加一些 Yii::trace() 调用:

class MyExtension {
    public function whatever() {
        Yii::trace("Inside MyExtension::whatever()", "MyExtension");
        // do some stuff
        Yii::trace("Inside MyExtension::whatever(), just did some stuff.", "MyExtension");
    }
}

这会将跟踪调用插入到您的 application.log 文件中(默认情况下,该文件位于 protected/runtime/application.log 中)。它们看起来像这样:

2013/02/21 15:35:43 [trace] [MyExtension] MyExtension::whatever()
在 /path/to/MyExtension.php (3) 2013/02/21 15:35:43 [trace] [MyExtension] 在 MyExtension::whatever() 内部,只是做了一些事情 在 /path/to/MyExtension.php (5)

将您需要的任何内容放入痕迹中。我首先要确保您认为您从浏览器发送的数据实际上正在以您期望的形式到达它打算到达的功能。如果那里一切正常,那么是时候启动网络检查器(我更喜欢 Chrome)并观看“网络”选项卡。查看对服务器的请求和传递的响应。还要检查 JS 控制台以确保那里没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多