Yii2 初学者。显示REST异常处理
在控制器中,我扩展了控制器类而不是ActiveController 我有一个简单的actionIndex()方法: 当我在浏览器中访问某个路由时,在调试器中,我看到这个函数正在执行(断点在函数中停止),但我得到500个状态代码(内部服务器错误)。我怎样才能找到错误的原因?我已经实现了actionError()方法,但它没有执行Yii2 初学者。显示REST异常处理,yii2,Yii2,在控制器中,我扩展了控制器类而不是ActiveController 我有一个简单的actionIndex()方法: 当我在浏览器中访问某个路由时,在调试器中,我看到这个函数正在执行(断点在函数中停止),但我得到500个状态代码(内部服务器错误)。我怎样才能找到错误的原因?我已经实现了actionError()方法,但它没有执行 public function actionError() { $exception = Yii::$app->errorHandler->e
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。它在开发过程中非常有用,但在任何情况下都必须在生产中禁用
错误报告设置为E\u ALL&~E\u警告&~E\u通知
来禁用警告。看见
public function actionIndex()
{
return ["text" => "some text"];
}