如何调试Yii扩展?

时间:2013-01-28 04:35:03

标签: php yii yii-extensions

我一直在为Yii烦恼,目前基本上都在努力完成可能(ajax-)刷新到不同规模(如日,周或月)的数据图表。我真的想使用Amcharts - 扩展名,但基本上像EFlot这样简单的东西也可以。

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

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

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

1 个答案:

答案 0 :(得分: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 [追踪] [MyExtension] MyExtension内部:: whatever()
  在/path/to/MyExtension.php(3)   2013/02/21 15:35:43 [追踪] [MyExtension] MyExtension内部:: whatever(),只是做了一些东西   在/path/to/MyExtension.php(5)

将您需要的任何东西放入痕迹中。我首先要确保您认为从浏览器发送的数据实际上是以您期望的形式实现的功能。如果一切正常,那么是时候启动网络检查员(我更喜欢Chrome)并观看网络标签。查看对服务器的请求和提供的响应。还要检查JS控制台,确保没有任何东西在那里打破。