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

时间:2015-10-14 08:37:38

标签: activerecord yii2

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);
}

4 个答案:

答案 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,但是确实忘记了摆脱特定位置的数组结构