Yii2 初学者。显示REST异常处理

Yii2 初学者。显示REST异常处理,yii2,Yii2,在控制器中,我扩展了控制器类而不是ActiveController 我有一个简单的actionIndex()方法: 当我在浏览器中访问某个路由时,在调试器中,我看到这个函数正在执行(断点在函数中停止),但我得到500个状态代码(内部服务器错误)。我怎样才能找到错误的原因?我已经实现了actionError()方法,但它没有执行 public function actionError() { $exception = Yii::$app->errorHandler->e

在控制器中,我扩展了控制器类而不是ActiveController

我有一个简单的actionIndex()方法:

当我在浏览器中访问某个路由时,在调试器中,我看到这个函数正在执行(断点在函数中停止),但我得到500个状态代码(内部服务器错误)。我怎样才能找到错误的原因?我已经实现了actionError()方法,但它没有执行

    public function actionError() {
    $exception = Yii::$app->errorHandler->exception;
    if ($exception !== null) {
        return $this->render('error', ['exception' => $exception]);
    }
}
如果我将actionError()方法的逻辑放在actionIndex()中,$exception变量为null

我得到的唯一输出是:

{
name: "PHP Warning",
message: "Expected array for frame 0",
code: 2,
type: "yii\base\ErrorException",
file: "Unknown",
line: 0,
stack-trace: []
}
但这是警告,不是错误。这是否会导致状态代码为500


我怎样才能得到错误?谢谢

不知道您的错误,但通常不需要返回json编码的响应。Yii检查请求的Accept头并相应地调整输出。在您的情况下,我只会使用:

public function actionIndex()
{
    return ["text" => "some text"];
}
可能它也可以解决您的错误…

根据此线程,这与Xdebug for Yii 2<2.0.9有关。 处理异常时,XDebug修改异常,Yii2无法正确处理

所以这里有几种可能的解决方案

  • 最好的办法是将Yii2更新为>=2.0.9的版本
  • 您还应该更正异常的来源(警告)。有警告从来都不是一个好主意。它可以隐藏更多的问题
  • 作为一种解决方法,您可以禁用XDebug。它在开发过程中非常有用,但在任何情况下都必须在生产中禁用

我现在将更新问题。我也试过这个,它是一样的。你的Yii2的确切版本是什么?这似乎与在PHP7上运行的Yii2的某个版本有关,该版本启用了XDebug。是否会导致响应状态为500?Yii的版本是2.0.5如何禁用警告?我不是说禁用警告。只需更正导致警告的代码。但是,如果您确实需要,您仍然可以通过将php.ini中的
错误报告设置为
E\u ALL&~E\u警告&~E\u通知
来禁用警告。看见
public function actionIndex()
{
    return ["text" => "some text"];
}