gpt4 book ai didi

activerecord - yii2 ActiveRecord findBySql - 响应内容不能是数组错误

转载 作者:行者123 更新时间:2023-12-04 19:02:53 32 4
gpt4 key购买 nike

Yii2 的新特性。

只是试图从 ActiveRecord 查询中获得返回。我意识到使用 Yii2 约定可能有更简单的方法来做到这一点

public function actionGet_permissions() {

$sql = 'select * from auth_item where owner_user_id IS NULL';
return Auth_Item::findBySql($sql)->all();
}

  • Errors "Response content must not be an array."


我认为我试图用这个函数返回的简单记录集非常明显。非常感谢任何帮助,如果任何其他信息有帮助,请告诉我。

为什么不允许 findBySql 返回数组?我知道我在这里遗漏了一些简单的东西。

谢谢!

编辑 1:
Auth_Item::find()->where(['owner_user_id' => null])->all();

返回相同的错误。同样,这似乎是一个如此简单的查询。

编辑 2:

堆栈跟踪:
Invalid Parameter – yii\base\InvalidParamException
Response content must not be an array.
• 1. in C:\xampp\htdocs\clienti\vendor\yiisoft\yii2\web\Response.php at line 944
throw new InvalidConfigException("The '{$this->format}' response formatter is invalid. It must implement the ResponseFormatterInterface.");
}
} elseif ($this->format === self::FORMAT_RAW) {
$this->content = $this->data;
} else {
throw new InvalidConfigException("Unsupported response format: {$this->format}");
}

if (is_array($this->content)) {
throw new InvalidParamException("Response content must not be an array.");
} elseif (is_object($this->content)) {
if (method_exists($this->content, '__toString')) {
$this->content = $this->content->__toString();
} else {
throw new InvalidParamException("Response content must be a string or an object implementing __toString().");
}
}
}
}
• 2. in C:\xampp\htdocs\cli\vendor\yiisoft\yii2\web\Response.php – yii\web\Response::prepare() at line 312
• 3. in C:\xampp\htdocs\cli\vendor\yiisoft\yii2\base\Application.php – yii\web\Response::send() at line 381
• 4. in C:\xampp\htdocs\cli\frontend\web\index.php – yii\base\Application::run() at line 18

编辑 3:

谢谢你们的帮助。对结果进行编码的 Json 解决了该问题。
public function actionGet_permissions() {
$result = Auth_Item::find()->where(['owner_user_id' => NULL])->all();
return Json::encode($result);
}

最佳答案

您应该使用 Yii2 功能并修改响应格式。

默认响应格式是 HTML,这就是为什么你有以下错误:

Response content must not be an array



你应该试试这个:
public function actionGet_permissions()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return Auth_Item::find()->where(['owner_user_id' => NULL])->all();
}

Yii 将自动发送 http header (以前的答案不会)并对您的模型进行编码。

阅读更多: http://www.yiiframework.com/doc-2.0/guide-runtime-responses.html

如果您想在所有 Controller 中使用此响应格式,您可以修改响应配置:
'response' => [                 
'format' => yii\web\Response::FORMAT_JSON,
'charset' => 'UTF-8',
],

阅读更多关于 yii\web\Response

关于activerecord - yii2 ActiveRecord findBySql - 响应内容不能是数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33120470/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com