Yii2的细微差别。
只是尝试从ActiveRecord查询返回。我意识到使用Yii2约定
可能有更简单的方法public function actionGet_permissions() {
$sql = 'select * from auth_item where owner_user_id IS NULL';
return Auth_Item::findBySql($sql)->all();
}
- 错误"响应内容不得为数组。"
我认为很明显我尝试使用此功能返回的简单记录集。非常感谢任何帮助,如果有任何其他信息有帮助,请告诉我。
为什么不允许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);
}
答案 0 :(得分:3)
您应该使用Yii2功能并修改响应格式。
默认响应格式为HTML,这就是您遇到以下错误的原因:
响应内容不得为数组
你应该试试这个:
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标头(之前的答案不会)并对您的模型进行编码。
了解详情:http://www.yiiframework.com/doc-2.0/guide-runtime-responses.html
如果您想在所有控制器中使用此响应格式,您可以修改响应配置:
'response' => [
'format' => yii\web\Response::FORMAT_JSON,
'charset' => 'UTF-8',
],
详细了解yii\web\Response
答案 1 :(得分:1)
使用createDirectStream[K, V, KD <: Decoder[K], VD <: Decoder[V], R](jssc: JavaStreamingContext, keyClass: Class[K], valueClass: Class[V], keyDecoderClass: Class[KD], valueDecoderClass: Class[VD], recordClass: Class[R], kafkaParams: Map[String, String], fromOffsets: Map[TopicAndPartition, Long], messageHandler: Function[MessageAndMetadata[K, V], R]): JavaInputDStream[R]
:
Active Record
答案 2 :(得分:0)
更好您直接在配置文件中进行更改,以便每个请求都获得正确的json编码。
'response' => [
'format' => yii\web\Response::FORMAT_JSON,
'charset' => 'UTF-8',
],
答案 3 :(得分:0)
format json通过转换为json来使变量发布过程自动标量,而html响应类型不能将数组转换为标量,因此数组必须具有json响应,我不小心将响应类型更改为HTML,但是确实忘记了摆脱特定位置的数组结构