0

我正在使用Yii2 REST apiAuthorisation : Bearer用于身份验证。

我有一个模型Event,只有 2 个动作CreateUpdate但我的Update动作不能正常工作并引发对象类转换错误。

我正在使用以下代码来查找Event具有混合条件的模型。

public function actionUpdate($id)
{
    $params=$_REQUEST;
    /*Following line throws error */
    $model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity]);

    if($model !== null){

        $model->attributes=$params;
        $model->partner_id = Yii::$app->user->id;
        $model->updated_date = time();

        if ($model->save()) {

            $this->setHeader(200);
            echo json_encode(array('status'=>1,'data'=>array_filter($model->attributes)),JSON_PRETTY_PRINT);

        }

    }

}

错误是这样的

类 api\modules\v1\models\User 的对象无法转换为字符串

我不明白为什么它说我已经创建了User类对象。

4

3 回答 3

2
Yii::$app->user->identity

是你应该使用的对象

Yii::$app->user->identity->id

所以最后一行将是:

$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
于 2016-05-17T07:39:33.150 回答
1

问题在于您的andWhere(),您正在尝试分配partner_id一个object可视化项。Yii::$app->user->identity,所以这是你的代码被破坏的地方。json_encode并且当你可以使用 Yii 的响应格式时不要使用Response::FORMAT_JSON,所以你的代码会是这样的:

public function actionUpdate($id)
{
    \Yii::$app->response->format = yii\web\Response::FORMAT_JSON; // formatting response in json format
    $params= json_decode(\Yii::$app->request->rawBody, 1);
    /*Following line throws error */
    $model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);

    if($model !== null){

        $model->attributes=$params;
        $model->partner_id = Yii::$app->user->id;
        $model->updated_date = time();

        if ($model->save()) {

            $this->setHeader(200);
            return array('status'=>1,'data'=> $model); // you can simply use $model

        }

    }

}
于 2016-05-17T07:10:36.273 回答
1

问题在这里:

andWhere(['partner_id'=> Yii::$app->user->identity])

您正在尝试将用户对象 ( Yii::$app->user->identity) 转换为字符串。相反,您需要使用用户的 id ( Yii::$app->user->identity->id),它是一个字符串。

于 2016-12-17T17:49:24.050 回答