Yii2 rest api update抛出对象转换错误

时间:2016-05-17 06:45:38

标签: php yii2 yii2-advanced-app yii2-basic-app yii-rest

我正在使用Yii2 REST api并使用Authorisation : 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类的对象。

3 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:1)

问题在于您的andWhere(),您试图分配partner_id object即。{ Yii::$app->user->identity,所以这就是您的代码破解的地方。当您可以使用Yii的响应格式json_encode时,请不要使用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

        }

    }

}

答案 2 :(得分:1)

问题在于:

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

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